首页 > 解决方案 > 名称未在 Python for 循环中定义

问题描述

我有一个数据框“total_data”,我想使用 .query() 方法和“for”循环对其进行过滤并分成几个子集。我将每个子集的条件写成字符串。这是我的代码:

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

for subset in subsets:
    query_sub = subset+'_query'
    total_data.query(query_sub).to_excel('data.xlsx', sheet_name = subset)

但我收到一个错误:未定义名称“subset1_query”。 当我在循环之外使用 total_data.query(subset1_query) 时,我得到了一个正确的数据框。为什么我会收到此错误?

标签: pandas

解决方案


我认为你想要做的是这里:

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

for subset in subsets:
    query_sub = subset+'_query'
    total_data.query(**eval**(query_sub)).to_excel('data.xlsx', sheet_name = subset)

但是对我来说问题是,你为什么不把两个subset_1|2_query 对象放在列表中,即

subsets = [('subset1', 'Column1 in @list1, Column2 in @list2'), ('subset2', 'Column3 in @list3, Column4 in @list4')]
for subset_name, query_sub in subsets:
        total_data.query(query_sub).to_excel('data.xlsx', sheet_name = subset_name)

那不是更直接一点吗?

编辑:我在第二个示例中修复了一些内容以更适合您的问题。起初我忽略了一些事情。


推荐阅读