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

如何正确使用df.query()多条件查询?and/or与&/|的选择及最佳实践

Pandas query方法中and/or与&/|的使用指南

问题梳理

在使用Pandas的query做多条件查询时,常会有这些困惑:

  • 用and/or或者&/|到底对不对?
  • 有没有必要同时混用两类运算符?
  • 哪种写法更规范?
  • 文档说“&/|和and/or优先级相同”,到底是什么意思?

实际测试发现两种写法结果一致,示例代码如下:

import numpy as np
import pandas as pd

df = pd.DataFrame(data=np.random.randn(5,2), columns=['A','B'])
df['names'] = list('ABCDE')

# 布尔运算符写法
query1 = df.query("A > -1 and B < 1 or 'B' in names")
# 位运算符写法
query2 = df.query("A > -1 & B < 1 | 'B' in names")

# 输出为True,结果完全一致
print(query1.equals(query2))

解答

  1. 优先级相同的实际含义
    在常规Python代码里,&/|的优先级比and/or高,比如a > 1 and b < 2 & c ==3会先计算b <2 & c==3;但在query的表达式里,这两类运算符的优先级是完全相同的——也就是说你示例里的两个表达式,运算顺序完全一致,所以结果没差别。

  2. 两种写法都合法
    在query中,and/or和&/|都是被支持的合法写法,只要逻辑没问题,都能得到正确结果。

  3. 没必要同时混用两类运算符
    两类运算符功能重叠,优先级又一致,混用只会让代码变难读,完全没有必要。日常开发中几乎碰不到需要同时用的场景。

  4. 最佳实践建议

  • 优先用and/or:这类写法更贴近自然语言,复杂条件下可读性拉满,别人一看就懂你的查询逻辑。
  • 复杂条件加括号:不管用哪种写法,多条件组合时最好用括号把逻辑分组,比如写成(A > -1 and B < 1) or 'B' in names,哪怕优先级没问题,也能避免误解。
  • 别把query的习惯带到普通代码里:在query之外的Python代码中,&/|优先级更高,要是照搬query里的写法,很容易出逻辑错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 15:35:36