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”时才替换?
用单词边界字符包裹您的关键字\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)
添加空白并通过您自己的代码解决该问题
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)