如何使用Pandas DataFrame字段在Python中的另一个字段中正则表达式替换文本?

时间:2018-08-22 12:45:29

标签: python regex pandas dataframe

我想在熊猫数据框的另一个字段(“单词”)的基础上找到文本。

#import re
import pandas as pd
df = pd.DataFrame([['I like apple pie','apple'],['Nice banana and lemon','banana|lemon']], columns=['text','words'])
df['text'] = df['text'].str.replace(r''+df['words'].str, '*'+group(0)+'*')
df

我想用*标记找到的单词。
我该怎么办?

所需的输出是:
我喜欢* apple *馅饼
尼斯*香蕉*和*柠檬*

2 个答案:

答案 0 :(得分:1)

使用(?i)的IIUC与re.I相同

df.text.replace(regex=r'(?i)'+ df.words,value="*")
Out[131]: 
0        I like * pie
1    Nice * and     *
Name: text, dtype: object

自从您更新问题

df.words=df.words.str.split('|')
s=df.words.apply(pd.Series).stack()
df.text.replace(dict(zip(s,'*'+s+'*')),regex=True)
Out[139]: 
0               I like *apple* pie
1    Nice *banana* and     *lemon*
Name: text, dtype: object

答案 1 :(得分:1)

您可以从words捕获单词,并在替换中使用后向引用将其包装在*中:

import re
import pandas as pd
df = pd.DataFrame([['I like apple pie','apple'],['Nice banana and     lemon','banana|lemon']], columns=['text','words'])

df['text'] = df['text'].replace(r'('+df['words']+')', r'*\1*', regex=True)
print(df)

打印:

                            text         words
0             I like *apple* pie         apple
1  Nice *banana* and     *lemon*  banana|lemon