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

Pandas多条件筛选时isin与str.contains结果差异原因咨询

isin与str.contains的差异及结果不一致原因

两个方法的核心匹配逻辑区别

  • isin是完全精确匹配:只有当countryname列的单元格完整值,和你传入的countries列表中某一个元素完全相等时,才会返回True,字符、大小写、空格有任何差异都不会匹配成功。
  • str.contains是子串模糊匹配:只要countryname列的单元格字符串中包含你传入的关键字,无论关键字前后是否存在其他内容,都会返回True。

本次场景下结果不一致的具体原因

你数据集里的countryname字段存储的大概率是完整国名,比如Bosnia and Herzegovina、Republic of Croatia这类格式,而非countries列表里的简短单值Bosnia、Croatia:

  1. 使用isin时,只有国名刚好和列表里的短名称完全一致的记录能被匹配到,所以只返回了2条结果。
  2. 使用str.contains时,只要完整国名里包含你输入的关键字就能匹配成功,同时你还额外加入了countries列表中没有的Montenegro匹配规则,覆盖了更多符合要求的记录,所以最终返回了预期的12条结果。

如果要优化模糊匹配的写法,不需要写多个或条件,可以直接用正则合并匹配规则:

# 等价于多个str.contains或条件的简化写法
target_countries = 'Bosnia|Croatia|Kosovo|Macedonia|Montenegro|Serbia|Slovenia'
projects[
    (projects['boardapprovaldate'] < pd.Timestamp(datetime.date(1992,4,27))) & 
    (projects['countryname'].str.contains(target_countries, na=False))
][cols_to_keep.columns].sort_values('boardapprovaldate')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 03:51:03