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

Python for循环调用pandas query方法报name未定义问题求解

报错原因

你在循环中拼接得到的query_sub是字符串形式的变量名(值为"subset1_query"这类文本),而非你提前定义的subset1_query、subset2_query变量实际存储的筛选条件内容。直接将该字符串传入.query()方法时,方法会将其解析为查询表达式,尝试从上下文环境中调用名为subset1_query的变量,自然触发未定义报错。

解决方案

方案1(推荐):用字典存储查询映射关系

直接将子集名和对应的筛选条件存入字典,避免动态读取变量的不稳定性,代码可读性和可维护性更高:

import pandas as pd

# 定义查询条件映射
query_map = {
    "subset1": "Column1 in @list1, Column2 in @list2",
    "subset2": "Column3 in @list3, Column4 in @list4"
}

# 注意:要写入多个sheet需用ExcelWriter,否则每次写入会覆盖整个文件,最终仅保留最后一个sheet
with pd.ExcelWriter("data.xlsx") as writer:
    for subset_name, query_condition in query_map.items():
        total_data.query(query_condition).to_excel(writer, sheet_name=subset_name, index=False)

方案2:动态读取现有变量值

如果你不想修改之前单独定义查询变量的代码,可以通过globals()方法从全局变量空间中读取对应变量的实际值,不推荐优先使用:

import pandas as pd

subsets = ['subset1', 'subset2']
subset1_query = 'Column1 in @list1, Column2 in @list2'
subset2_query = 'Column3 in @list3, Column4 in @list4'

with pd.ExcelWriter("data.xlsx") as writer:
    for subset in subsets:
        query_condition = globals()[f"{subset}_query"]
        total_data.query(query_condition).to_excel(writer, sheet_name=subset, index=False)

内容的提问来源于stack exchange,提问作者Екатерина Тиньгаева

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 17:36:03