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

使用Pandas筛选DataFrame中reports列值在10~31间行的错误排查

问题出在逻辑运算符的使用上!

你想要筛选reports值在10~31之间的行,但错误地用了逻辑或(|),而不是需要的逻辑与(&)。

为什么原来的代码会得到错误结果?

你的条件(df.reports >= 10) | (df.reports <= 31)表达的是「只要满足其中一个条件就保留该行」,但实际上任何数值都符合这个或条件:

  • 比如reports=47,它满足>=10,所以被保留;
  • reports=6满足<=31,也被保留;
    最终所有行都被选中,完全不符合你要的「10到31之间」的需求。

正确的代码实现

这里给你三种可行的写法,都能得到正确结果:

1. 布尔索引(修正运算符)

把|换成&,记得每个条件用括号包裹(避免Pandas的运算符优先级问题):

df_4 = df[(df.reports >= 10) & (df.reports <= 31)]

2. query方法(两种写法)

要么替换运算符,要么直接用更直观的连续比较:

# 替换运算符的写法
df_5 = df.query('reports >= 10 & reports <= 31')
# 更符合自然语言的写法
df_5 = df.query('10 <= reports <= 31')

3. 用between()方法(最简洁)

Pandas专门提供了between()方法来处理区间筛选,默认包含边界值(正好匹配你的10~31需求):

df_6 = df[df.reports.between(10, 31)]
# 也可以在query里使用
df_6 = df.query('reports.between(10, 31)')

正确的输出结果

运行以上任意一种代码,你会得到符合预期的筛选结果:

month of entry   name  reports
0        20171002  Jason       14
1        20171206  Molly       24
2        20171208   Tina       31
3        20171018   Jake       22
8        20171115  David       14
9        20171030   Jack       10

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:12:41