Pandas DataFrame使用&运算符实现AND逻辑多条件筛选报错解决
报错原因
你的写法报错核心是逻辑与运算符的作用对象搞错了:
- 你之前的代码把
&放在了两个df.loc返回的DataFrame结果之间,本质是想对两个完整的DataFrame做按位与运算,而非在筛选条件层面对两个布尔判断做逻辑与,运算对象完全不符合要求。 - 用Python原生
and关键字报错是因为它只能判断单个布尔值,无法对pandas的布尔序列做逐元素的逻辑匹配,不支持pandas的向量化筛选逻辑。 - 注意pandas多条件筛选时,
&(逐位与)、|(逐位或)、~(逐位取反)的优先级高于比较运算符,每个独立条件必须用圆括号包裹,否则会出现优先级导致的逻辑错误或报错。
正确实现代码
写法1:对应原有两个取反逻辑合并
完全基于你已有的两条筛选规则做AND合并,保留Name列不小于-1000、同时不大于1000的行:
dataframe = df.loc[(~(df['Name'] < -1000)) & (~(df['Name'] > 1000))]
写法2:更简洁的区间筛选
你的需求本质是筛选Name列落在[-1000, 1000]闭区间的行,直接用pandas内置的between方法可读性更高,也不容易写错,效果和上面完全一致:
dataframe = df.loc[df['Name'].between(-1000, 1000)]
内容的提问来源于stack exchange,提问作者ShieldScrub
相关产品推荐
相关产品推荐

