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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:42:58