我正在尝试使用txt文件替换数据框中列中的某些字符串。
我有一个如下所示的数据框(这是我所拥有的庞大数据框的一个非常小的版本)。
coffee_directions_df
Utterance Frequency
Directions to Starbucks 1045
Directions to Tullys 1034
Give me directions to Tullys 986
Directions to Seattles Best 875
Show me directions to Dunkin 812
Directions to Daily Dozen 789
Show me directions to Starbucks 754
Give me directions to Dunkin 612
Navigate me to Seattles Best 498
Display navigation to Starbucks 376
Direct me to Starbucks 201
DF显示人们的言语和话语的频率。
I.e。,"指向星巴克"发了1045次。
我有另一个xlsx格式coffee_donut.xlsx
的DataFrame,我想用它来导入和替换某些字符串(类似于Replace words by checking from pandas dataframe要求的内容)。
coffee_donut
Token Synonyms
Starbucks Coffee
Tullys Coffee
Seattles Best Coffee
Dunkin Donut
Daily Dozen Donut
最终,我希望数据框看起来像这样:
coffee_donut_df
Utterance Frequency
Directions to Coffee 1045
Directions to Coffee 1034
Give me directions to Coffee 986
Directions to Coffee 875
Show me directions to Donut 812
Directions to Donut 789
.
.
.
我按照上一个问题的步骤,但我在最后一部分陷入困境:
import re
import pandas as pd
sdf = pd.read_excel('C:\coffee_donut.xlsx')
rep = dict(zip(sdf.Token, sdf.Synonyms)) #convert into dictionary
rep = dict((re.escape(k), v) for k, v in rep.iteritems())
pattern = re.compile("|".join(rep.keys()))
rep = pattern.sub(lambda m: rep[re.escape(m.group(0))], **coffee_directions_df**)
print rep
如何将rep应用于数据帧?如果这是一个noob问题,我很抱歉。我非常感谢你的帮助。
谢谢!
答案 0 :(得分:1)
你几乎拥有它!这是一个在当前代码中重用regex对象和lambda函数的解决方案。
而不是最后一行(rep = pattern.sub(...
),请运行:
coffee_directions_df['Utterance'] = \
coffee_directions_df['Utterance'].str.replace(pattern, lambda m: rep[m.group(0)])
# Confirm replacement
coffee_directions_df
Utterance Frequency
0 Directions to Coffee 1045
1 Directions to Coffee 1034
2 Give me directions to Coffee 986
3 Directions to Seattles Best 875
...
这是有效的,因为pd.Series.str.replace
可以接受已编译的正则表达式对象和函数; see the docs for more