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,提问作者Екатерина Тиньгаева
相关产品推荐
相关产品推荐

