我想在熊猫数据框的另一个字段(“单词”)的基础上找到文本。
#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 *馅饼
尼斯*香蕉*和*柠檬*
答案 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