私は「DESCRIPTION」と呼ばれるデータフレーム内のテキスト列を持っているの単語の特定の数の範囲内であれば、文字列のいずれかの単語を交換してください。私は、 "タイル"または "タイル"という言葉が "屋根"という言葉の6語以内にあるすべてのインスタンスを見つけて、単に "タイル/ s"という単語を "rooftiles"に変更する必要があります。私は同じことを "床"と "タイル"( "タイル"を "フロルティール"に変更)する必要があります。これは、特定の言葉が他の言葉と一緒に使用されているときに我々が見ている建物取引を区別するのに役立ちます。その単語が別の単語
s1=pd.Series(["After the storm the roof was damaged and some of the tiles are missing"])
s2=pd.Series(["I dropped the saw and it fell on the floor and damaged some of the tiles"])
s3=pd.Series(["the roof was leaking and when I checked I saw that some of the tiles were cracked"])
df=pd.DataFrame([list(s1), list(s2), list(s3)], columns = ["DESCRIPTION"])
df
私は後の午前ソリューションは、(データフレーム形式で)次のようになります:
1.After the storm the roof was damaged and some of the rooftiles are missing
2.I dropped the saw and it fell on the floor and damaged some of the floortiles
3.the roof was leaking and when I checked I saw that some of the tiles were cracked
データと私の最新の不正確な試みの例があり、私が何を意味するか表示するには
は、ここで私は、「タイル」の単語を置き換えるためにREGEXパターンを使用して一致させることを試みたが、それは私がやろうとしています何をすべきかの方法でもあります...完全に間違っているのですか?私は、Pythonに新しいです...
regex=r"(roof)\b\s+([^\s]+\s+){0,6}\b(.*tiles)"
replacedString=re.sub(regex, r"(roof)\b\s+([^\s]+\s+){0,6}\b(.*rooftiles)", df['DESCRIPTION'])
UPDATE:SOLUTIONすべての助けを
ありがとう! Janのコードを使っていくつかの追加/修正を加えて動作させることができました。最終的な作業コード(本当のではなく、たとえば、ファイルやデータを使用して)以下である:
claims_file = pd.read_csv(project_path + claims_filename) # Read input file
claims_file["LOSS_DESCRIPTION"] = claims_file["LOSS_DESCRIPTION"].fillna('NA') #get rid of encoding errors generated because some text was just 'NA' and it was read in as NaN
#create the REGEX
rx = re.compile(r'''
( # outer group
\b(floor|roof) # floor or roof
(?:\W+\w+){0,6}\s* # any six "words"
)
\b(tiles?)\b # tile or tiles
''', re.VERBOSE)
#create the reverse REGEX
rx2 = re.compile(r'''
( # outer group
\b(tiles?) # tile or tiles
(?:\W+\w+){0,6}\s* # any six "words"
)
\b(floor|roof)\b # roof or floor
''', re.VERBOSE)
#apply it to every row of Loss Description:
claims_file["LOSS_DESCRIPTION"] = claims_file["LOSS_DESCRIPTION"].apply(lambda x: rx.sub(r'\1\2\3', x))
#apply the reverse regex:
claims_file["LOSS_DESCRIPTION"] = claims_file["LOSS_DESCRIPTION"].apply(lambda x: rx2.sub(r'\3\1\2', x))
# Write results into CSV file and check results
claims_file.to_csv(project_path + output_filename, index = False
, encoding = 'utf-8')
出力として希望のものを投稿できますか? – void