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

Python中and/&/or/|的等价规则是什么?Pandas多条件筛选如何实现?

运算符区别和Pandas多条件过滤解决方案

一、Python中and/or与&/|的核心差异

  • 逻辑运算符and/or:属于Python原生布尔逻辑运算符,是短路求值的,仅支持对单个布尔值做逻辑判断,无法直接作用于pandas的Series、numpy数组这类序列结构,强行对序列做布尔判断会触发报错。
  • 位运算符&/|:原生语义是对整数做按位运算,在pandas、numpy中被重载为元素级逻辑运算符,可以对序列的每个元素分别做逻辑判断,返回等长的布尔序列,刚好适配数据框的条件筛选场景。
  • 额外注意:pandas多条件组合时,每个独立条件必须用小括号包裹,因为&/|的运算优先级高于==/!=/>这类比较运算符,不加括号会优先执行位运算再执行比较,直接触发错误。

二、多国家保留的正确实现方式

你之前的几种写法错误原因如下:

  1. 用and的写法:会尝试把整个Country列的Series转为单个布尔值,直接触发报错
  2. 不加括号用&的写法:优先级错误,会先执行"South Africa" & "UK"的位运算,字符串不支持位运算直接报错
  3. 逗号分隔值的写法:属于pandas选取行列的语法,和条件判断逻辑无关,自然无法运行

写法1:用isin方法(多值匹配首选,最简洁)

多值相等判断直接用isin方法即可,不用编写多个条件组合:

# 直接保留指定国家的行,等价于删除不在列表内的行
covid = covid[covid.Country.isin(["South Africa", "UK", "US", "India"])]

如果一定要沿用drop的写法,逻辑取反即可:

# ~是pandas的元素级取反运算符,对应原生的not
covid = covid.drop(covid[~covid.Country.isin(["South Africa", "UK", "US", "India"])].index)

写法2:用|做多条件组合(适合逻辑更复杂的场景)

如果需要用等于条件单独拼接,每个条件加括号后用|连接即可:

covid = covid[(covid.Country == "South Africa") | (covid.Country == "UK") | (covid.Country == "US") | (covid.Country == "India")]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 17:48:04