我有一个包含需要清理匹配各种正则表达式模式的字符串的文本的熊猫数据框列。我当前的尝试(下面给出)循环遍历每个模式,创建包含匹配的新列(如果找到),然后在数据框中循环,在找到的匹配处拆分列。然后我放弃不需要的匹配列're_match'。删除与熊猫系列中的多个正则表达式模式匹配的字符串
虽然这适用于我目前的使用情况,但我不禁想到,无需使用iterrows()
并创建一个新列,在熊猫中一定有更高效,矢量化的方法。我的问题是,是否有一个更理想的方式去除匹配列中多个正则表达式模式的字符串?
在我目前的使用情况下,不需要的字符串总是在文本块的末尾,因此使用split(...)[0]
。但是,如果不需要的字符串可以从文本中的任何一点提取出来,那就太好了。
此外,请注意,将正则表达式组合成一个长单个模式将是不可取的,因为有数十种模式会定期更改。
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)
谢谢您的帮助
我不熟悉'pandas',但这里我所了解的问题可能来自称为'dataframe'的数据结构。克服这个任务的简单方法可能只是使用纯Python或sed。 – fronthem