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

如何从pandas dataframe的指定列中筛选出包含特定取值的行?

问题原因

你代码的问题出在'failed' or 'successful'的写法上:Python的or是原生逻辑运算符,会直接对两侧的字符串做布尔判定,非空字符串的布尔值为True,因此整个表达式会直接返回第一个为真的值也就是'failed'。你写的筛选逻辑实际等价于df['state'].str.contains('failed', na=False),自然只能筛选到state为failed的行。你之前用相同写法得到正确结果属于巧合,该写法本身不符合语法逻辑。

正确实现方案
  • 方案1:适配原有str.contains写法,用正则的|分隔多个匹配项,适合模糊匹配场景:
df = df[df['state'].str.contains('failed|successful', na=False)]

注意该写法为模糊匹配,如果state列存在其他包含这两个字符串的取值(比如failed_audit)也会被命中,需要完全匹配推荐用方案2。

  • 方案2:用isin方法做精确值匹配,更符合筛选取值属于指定集合的需求,性能也更优:
df = df[df['state'].isin(['failed', 'successful'])]

该写法只会匹配state取值完全等于failed或successful的行,不会命中包含对应子串的其他取值。

  • 方案3:分开写匹配条件,用pandas的按位或运算符|拼接,适合需要灵活加其他筛选条件的场景:
df = df[(df['state'] == 'failed') | (df['state'] == 'successful')]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 19:54:02