gpt4 book ai didi

python - 如何否定 Pandas 替换的正则表达式

转载 作者:行者123 更新时间:2023-11-28 19:53:13 25 4
gpt4 key购买 nike

在 pandas 中,我可以搜索和替换所有包含单词 fish 的字段,例如,使用 df.replace(r'.*fish.*', 'foo', regex = True) .

But how do I search and replace all fields that don't contain the word fish?

在我的示例中,将所有不包含单词 fish 的字段替换为单词“foo”。

例如,假设数据框是

applefish pear
water afishfarm

我希望将其转换为

applefish foo
foo afishfarm

最佳答案

您可以使用否定前瞻 (?!) 断言; ^(?!.*fish).*$ 将首先断言模式不包含单词 fish 然后匹配所有内容直到字符串末尾并替换它使用 foo:

  • ^ 表示字符串的开头,结合(?!.*fish),在BOS断言没有.*fish这样的模式 在字符串中;
  • 如果断言成功,则匹配到字符串.*$结尾的所有内容,并将其替换为foo;如果断言失败,模式不匹配,什么也不会发生;

所以:

df.replace(r'^(?!.*fish).*$', 'foo', regex=True)
# 0 1
#0 applefish foo
#1 foo afishfarm

如果字符串可以包含多个单词:

df
# 0 1
#0 applefish pear pear
#1 water afishfarm

您可以使用单词边界\b来代替^,单词字符\w来代替:

df.replace(r'\b(?!.*fish)\w+', 'foo', regex=True)
# 0 1
#0 applefish foo foo
#1 foo afishfarm

关于python - 如何否定 Pandas 替换的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45987306/

25 4 0