使用 pandas str.replace 执行全字子字符串替换

Pin*_*ts0 0 python string replace pandas

我有一个示例数据框文本列,其中包含包含单词 'eng' 和单词 'engine' 的字符串。

ID  Text
1   eng is here
2   engine needs washing
3   eng is overheating 
Run Code Online (Sandbox Code Playgroud)

我想用“引擎”这个词代替“eng”这个词。我使用下面的代码:

df['Text'] = df['Text'].str.replace('eng', 'engine')
Run Code Online (Sandbox Code Playgroud)

但这弄乱了我第二行的文字。第二行变成

ID  Text
2   engineine needs washing
Run Code Online (Sandbox Code Playgroud)

有没有办法做这个词替换,以便它只在整个词说“eng”时才替换?

cs9*_*s95 9

用单词边界字符包裹您的关键字\b

df['Text'].str.replace(r'\beng\b', 'engine')

0           engine is here
1     engine needs washing
2    engine is overheating
Name: Text, dtype: object
Run Code Online (Sandbox Code Playgroud)

如果您有多个关键字要以这种方式替换,请replace使用regex=True开关将字典传递给:

repl = {'eng' : 'engine'}
repl = {rf'\b{k}\b': v for k, v in repl.items()}

df['Text'].replace(repl, regex=True)

0           engine is here
1     engine needs washing
2    engine is overheating
Name: Text, dtype: object
Run Code Online (Sandbox Code Playgroud)


WeN*_*Ben 5

添加空白并通过您自己的代码解决该问题

df['Text'].str.replace('eng ', 'engine ')
Out[736]: 
0            engine is here
1      engine needs washing
2    engine is overheating 
Name: Text, dtype: object
Run Code Online (Sandbox Code Playgroud)

更新

df.Text.str.split(' ',expand=True).replace('eng','engine').fillna('').apply(' '.join,1)
Out[752]: 
0           engine is here 
1     engine needs washing 
2    engine is overheating 
dtype: object
Run Code Online (Sandbox Code Playgroud)