pandas使用df.query筛选元组类型列值失败的原因及解决方案
原因说明
pandas的query方法在解析查询语句时,会默认将括号识别为表达式分组的语法符号,而非元组字面量标识。你写的a==(1,2)在实际执行时,右侧的(1,2)没有被识别为元组类型,自然无法和列a中存储的元组值匹配,因此返回空DataFrame。
正确筛选方案
- 方案1:通过
@符号引用外部定义的元组变量(最推荐,可读性最高)
# 先在Python环境中定义要匹配的元组 target = (1, 2) # 查询时用@引用变量,会直接取变量的实际类型和值进行匹配 df.query('a == @target')
运行后会正确返回第一行匹配数据。
- 方案2:在查询语句内显式构造元组
如果不想额外定义外部变量,可以在query语句中调用tuple()构造函数明确生成元组:
df.query('a == tuple((1, 2))')
- 方案3:使用原生布尔索引(无query依赖)
如果没有必须使用query的业务场景,直接用pandas原生布尔索引写法更简单,不会触发query的语法解析坑:
df[df['a'] == (1, 2)]
内容的提问来源于stack exchange,提问作者Ruchit
相关产品推荐
相关产品推荐

