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

如何修正Python中Pandas query的UndefinedVariableError错误

报错原因分析与解决方法

报错原因

  1. 字符串拼接缺失引号:批量循环时用f-string生成query语句,替换后的州名没有被引号包裹。比如处理"Jammu & Kashmir"时,最终生成的条件是Last_residence==Jammu & Kashmir,Pandas会将Jammu识别为未定义的变量,而非字符串值,因此抛出UndefinedVariableError。而单个执行时你手动给州名加了双引号,所以能正确识别为字符串常量。
  2. 数据框被意外修改:使用inplace=True会直接修改原andhrapradesh数据框,第一次循环过滤后,后续循环是在已过滤的数据集上再次筛选,导致结果完全错误。

解决方法

方法1:f-string拼接时添加引号

给f-string中的{name}包裹双引号,确保替换后是合法的字符串匹配条件,同时复制原数据避免修改原始数据集:

states = ["Jammu & Kashmir","Punjab",'Himachal Pradesh']
# 复制原数据,避免循环中修改原始数据
original_df = andhrapradesh.copy()
for name in states:
    filtered_df = original_df.query(f'Duration_of_residence=="All durations of residence" & Last_residence_R_or_U=="Urban" & Last_residence=="{name}"')
    print(f"{name}: {filtered_df['Total_migrants'].sum()}")

方法2:使用query的变量引用(@符号)

Pandas的query支持用@直接引用当前作用域的变量,无需手动拼接字符串,更简洁安全:

states = ["Jammu & Kashmir","Punjab",'Himachal Pradesh']
original_df = andhrapradesh.copy()
for name in states:
    filtered_df = original_df.query('Duration_of_residence=="All durations of residence" & Last_residence_R_or_U=="Urban" & Last_residence==@name')
    print(f"{name}: {filtered_df['Total_migrants'].sum()}")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 05:45:34