ele*_*ora 2 python regex pandas
在pandas中,我可以搜索并替换包含单词fish的所有字段,例如,使用df.replace(r'.*fish.*', 'foo', regex = True).
但是如何搜索和替换不包含单词fish的所有字段?
在我的例子中,用'foo'一词替换所有不包含单词fish的字段.
例如,假设数据帧是
applefish pear
water afishfarm
Run Code Online (Sandbox Code Playgroud)
我希望将其转化为
applefish foo
foo afishfarm
Run Code Online (Sandbox Code Playgroud)
你可以使用负向前看(?!)断言; ^(?!.*fish).*$首先断言模式不包含单词fish然后匹配每个东西直到字符串的结尾并将其替换为foo:
^表示字符串的开头,结合(?!.*fish),它在BOS断言.*fish字符串中没有模式;.*$,并替换为foo; 如果断言失败,模式不匹配,则不会发生任何事情;所以:
df.replace(r'^(?!.*fish).*$', 'foo', regex=True)
# 0 1
#0 applefish foo
#1 foo afishfarm
Run Code Online (Sandbox Code Playgroud)
如果字符串可以包含多个单词:
df
# 0 1
#0 applefish pear pear
#1 water afishfarm
Run Code Online (Sandbox Code Playgroud)
您可以使用单词边界\b替换^和单词字符\w来替换.:
df.replace(r'\b(?!.*fish)\w+', 'foo', regex=True)
# 0 1
#0 applefish foo foo
#1 foo afishfarm
Run Code Online (Sandbox Code Playgroud)
您可以将 apply 与 str.contains 一起使用
df.apply(lambda x: x.replace(x[~x.str.contains('fish')], 'foo'))
Run Code Online (Sandbox Code Playgroud)
你得到
0 1
0 applefish foo
1 foo afishfarm
Run Code Online (Sandbox Code Playgroud)
注意:我什至不推荐这样做,因为 Psidom 的解决方案效率更高。
| 归档时间: |
|
| 查看次数: |
1596 次 |
| 最近记录: |