如何在for循环中保存多个带编号的DataFrame变量(如case1)
解决方法:用字典存储带编号的DataFrame
你的原代码存在几个问题:
- 多层嵌套循环里的
count循环完全多余,会重复执行相同的筛选操作并覆盖结果 case[m] = pd.DataFrame()这行逻辑错误,会试图给DataFrame赋值索引为m的元素为空DataFrame,大概率触发报错- 动态创建
case1、case2这类变量不是最优方案,推荐用字典来统一管理,避免污染命名空间,同时更易批量操作
修正后的代码
import numpy as np import pandas as pd # 补充原代码遗漏的导入 # 初始化字典,用来存储所有筛选后的DataFrame case_dict = {} # 计数器,用于生成case1、case2...的编号 case_number = 1 # 遍历各筛选维度的组合 for i in range(0, 6): for j in range(0, 6): for k in range(0, 4): for l in range(0, 10): # 执行数据筛选 filtered_case = data[(data["CURRENT_ENERGY_RATING_Code"] == i) & (data["PROPERTY_TYPE"] == j) & (data["BUILT_FORM"] == k) & (data["CONSTRUCTION_AGE_BAND"] == l)] # 将结果存入字典,键为带编号的名称 case_dict[f'case{case_number}'] = filtered_case # 编号自增 case_number += 1
如何使用存储的DataFrame
- 访问单个结果:比如要查看第1个筛选结果,直接用
case_dict['case1'] - 遍历所有结果:
for name, df in case_dict.items(): print(f"查看{name}:") print(df.head())
可选优化:跳过空DataFrame
如果想只保留有数据的结果,可以在存入字典前加判断:
if not filtered_case.empty: case_dict[f'case{case_number}'] = filtered_case case_number += 1
内容的提问来源于stack exchange,提问作者Rishikesh Chakraborty
相关产品推荐
相关产品推荐

