You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用df.column.str.contains()实现与给定自定义筛选函数相同的效果

问题原因

你写的正则表达式确实是导致结果不一致的核心原因,问题出在你给关键词前后加的(\w|\W)匹配规则:

  • (\w|\W)等价于匹配任意1个字符,这套规则强制要求「England」「King」两个关键词的前后必须至少存在1个其他字符
  • 这会漏掉三种符合要求的场景:
    • 关键词出现在question字段的开头(比如字段值为England's King is Charles,开头的England前面没有字符,无法被你的正则匹配)
    • 关键词出现在question字段的结尾(比如字段值为Who is the King of England,结尾的England后面没有字符,无法被你的正则匹配)
    • 字段值仅由关键词组成(比如字段值为England King,两个关键词都不会被你的正则匹配)

而参考代码的逻辑是只要关键词作为子串存在就匹配,没有位置限制,所以两者结果不一致。

正确实现方案

方案1:关闭正则,直接匹配子串(更简洁高效,推荐)

不需要用正则,str.contains关闭正则时就是直接判断子串是否存在,和参考代码逻辑完全一致:

re_filter = data[
    (data.question.str.contains("England", case=False, regex=False)) &
    (data.question.str.contains("King", case=False, regex=False))
]

方案2:使用正则,去掉多余的前后匹配规则

如果一定要用正则,直接写关键词本身即可,str.contains的正则匹配默认只要子串匹配就返回True:

re_filter = data[
    (data.question.str.contains("England", case=False, regex=True)) &
    (data.question.str.contains("King", case=False, regex=True))
]

内容的提问来源于stack exchange,提问作者Neednewbrain

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 08:45:00