Pandas.query报错‘dv未定义’:如何在查询中正确使用自定义变量?
Pandas筛选数据时"dv is not defined"错误的解决方法
嗨,我来帮你搞定这个问题~你遇到的错误主要是因为query()函数的语法用错了,把Python的语法和Pandas query的字符串语法混在一起了,咱们一步步来修正:
首先看你原来的代码问题:
dv = 7440 values = df.query('datevalue > dv' and country = "usa")
这里有三个明显的问题:
- 你把Python的
and运算符写在了query的字符串外面,这会导致字符串拼接逻辑错误,Pandas根本没法识别你的完整条件 - 判断相等要用比较运算符
==,而不是赋值符号=,这是Python和SQL风格语法的基础区别 - 在
query()里引用外部定义的变量(比如你这里的dv),需要在变量前加@符号,告诉Pandas这是外部变量,不是DataFrame里的列
正确的写法(两种可选)
方法1:修正query()的语法
dv = 7440 values = df.query('datevalue > @dv AND country == "usa"')
这里的关键改动:
- 把整个筛选条件放在同一个字符串里
- 用
@dv来引用外部的dv变量 - 用
==判断country是否等于"usa",用AND(小写and也可以)连接两个条件
方法2:用布尔索引(更直观,适合新手)
如果你觉得query()的语法有点绕,也可以用Pandas的布尔索引来实现,不需要记query的特殊规则:
dv = 7440 values = df[(df['datevalue'] > dv) & (df['country'] == "usa")]
注意这里要用&代替and(因为是对布尔数组做元素级别的逻辑运算),而且每个条件都要加括号,避免运算符优先级出错。
这样修改后,你就能正确筛选出datevalue大于7440且country为"usa"的数据啦~
内容的提问来源于stack exchange,提问作者MathiasRa
相关产品推荐
相关产品推荐

