私は様々な正規表現パターンにマッチする文字列を削除する必要のあるテキストを含むPandasデータフレーム列を持っています。私の現在の試み(下記)は、各パターンをループし、見つかった場合は一致を含む新しい列を作成し、次にデータフレームをループして、見つかった一致で列を分割します。次に、不要な一致列 're_match'を削除します。パンダシリーズから複数の正規表現パターンに一致する文字列を削除する
これは私の現在の使用例では機能しますが、iterrows()
を使用せずに新しい列を作成することなく、パンダでこれを行うより効率的でベクター化された方法が必要であると考えることはできません。私の質問は、列から複数の正規表現パターンに一致する文字列を削除する最適な方法はありますか?
私の現在の使用例では、不要な文字列は常にテキストブロックの末尾にあるため、split(...)[0]
を使用しています。しかし、テキスト内の任意の点から不要な文字列を抽出できれば素晴らしいでしょう。
正規表現を1つの長い単一パターンにまとめると、数十のパターンが定期的に変更されるため、不可能になることに注意してください。
df = pd.read_csv('data.csv', index_col=0)
patterns = [
'(regex1 \d+)',
'((?: regex 2)? \d{1,2})',
'(\d{0,2}.?\d{0,2}-?\d{1,2}.?\d{0,2}regex3)',
]
for p in patterns:
df['re_match'] = df['text'].str.extract(
pat=p, flags=re.IGNORECASE, expand=False
)
df['re_match'] = df['re_match'].fillna('xxxxxxxxxxxxxxx')
for index, row in df.iterrows():
df.loc[index, 'text'] = row['text'].split(row['re_match'])[0]
df = df.drop('re_match', axis=1)
あり、確かで、それはdf.applymap(some_function)
と呼ばれるあなたの助け
私は 'pandas'に慣れていませんが、ここで私が理解している問題は' dataframe'というデータ構造から来るかもしれません。この作業を克服する簡単な方法は、単に純粋なpythonまたはsedを使用することです。 – fronthem