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

基于@choldgraf方案改写:Pandas Query用变量作列名失败求助

Pandas query方法用变量作为列名查询的解决方案

我来帮你搞定这个问题——你遇到的执行失败,本质是Pandas query方法的命名空间规则导致的:query里的字符串会在它自己的表达式上下文里解析,它会把myvar当成DataFrame的列名,而不是你外部定义的那个变量myvar = 'Size',自然找不到对应列,也就出不来预期结果。

下面给你几种实用的解决办法:

方法1:用@引用外部变量+列名标识

这是Pandas官方推荐的方式,用@前缀告诉query这是外部变量,同时要把变量对应的列名用反引号或者eval包裹,让Pandas识别这是列名而非值:

import pandas as pd
fooframe = pd.DataFrame({'Size':['Large', 'Medium', 'Small', 'Tiny'], 'Color':[1, 2, 3, 4]})
myvar = 'Size'
# 方式A:用f-string把变量转成带反引号的列名(简洁直观)
subframe = fooframe.query(f"`{myvar}` == 'Large'")
# 方式B:用eval解析变量对应的列(兼容更老版本Pandas)
subframe = fooframe.query("eval(@myvar) == 'Large'")

两种方式都能让Pandas正确识别你要用Size列来筛选,最终得到只包含Large行的结果。

方法2:用loc替代query(更直观的写法)

如果觉得query的语法有点绕,直接用loc索引会更简单,完全不用纠结命名空间的问题:

subframe = fooframe.loc[fooframe[myvar] == 'Large']

这种写法逻辑清晰,新手也不容易出错,适合简单的筛选场景。

验证结果

不管用哪种方法,最终得到的subframe都是符合预期的:

Size  Color
0  Large      1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:45:17