如何使用Python Pandas读取CSV文件中指定数值区间的数据
你遇到的报错是pandas布尔索引的常见问题:Python原生的and关键字、连续比较语法x_lower <= x <= x_higher都会尝试将整个布尔Series转换为单个布尔值,而pandas没有默认的单布尔值转换规则,因此会抛出真值模糊的错误。
正确实现方式
方法1:使用位与运算符&
位运算符是pandas中多条件筛选的标准实现,注意每个比较条件必须用小括号包裹,避免运算符优先级问题:
# 对指定数值列筛选,推荐指定列名,避免其他非数值列干扰 x_ideal = x[(x['numerical value'] >= x_lower) & (x['numerical value'] <= x_higher)] # 如果你确实要筛选整个DataFrame所有列都符合区间要求的行,加上all(axis=1)判断整行都满足条件 x_ideal = x[(x >= x_lower).all(axis=1) & (x <= x_higher).all(axis=1)]
方法2:使用between方法(更简洁)
pandas提供了专门的区间筛选方法between,默认是闭区间(包含上下限),正好匹配你的需求:
x_ideal = x[x['numerical value'].between(x_lower, x_higher)]
注意事项
- pandas布尔索引的逻辑运算要使用
&(与)、|(或)、~(非),不要和Python原生的and/or/not混用 - 多条件组合时每个独立判断必须用小括号包裹,否则会因为运算符优先级问题导致报错或结果不符合预期
用你的示例CSV运行后,输出结果会包含以下符合要求的行:
| date | numerical value |
|---|---|
| Thursday | 3 |
| Friday | 4 |
| Saturday | 8 |
| Thursday | 4 |
| Friday | 7 |
内容的提问来源于stack exchange,提问作者Serena
相关产品推荐
相关产品推荐

