如何用for循环或其他方法批量创建多个DataFrame?
批量创建DataFrame的优化方案
问题分析
你手动创建25个DataFrame的方式重复冗余,尝试的循环代码存在两个核心问题:
- 错误试图动态生成变量名(
a'i'这种写法在Python中不合法) - 循环嵌套逻辑混乱,多了不必要的
range(25)循环,且索引调用错误(day[j]中j是字符串元素,不是索引)
正确实现方法
推荐使用字典存储批量生成的DataFrame,既便于管理,又避免动态变量名的弊端。结合itertools.product可高效生成所有筛选条件的组合:
步骤1:导入必要工具
import itertools import pandas as pd
步骤2:生成所有条件组合并创建DataFrame字典
day = ['mon', 'tue', 'wed','thu','fri'] jjj = ['AA','BB','C3','FF','E0','DD'] kkk= ['3bit','2bit','4bit','8bit','16bit'] # 空字典存储结果 df_dict = {} # 遍历所有day、jjj、kkk的组合 for d, j, k in itertools.product(day, jjj, kkk): # 筛选符合条件的行并转为float类型 filtered_df = df[(df['ITEM'].str.contains(d)) & (df['ITEM'].str.contains(j)) & (df['ITEM'].str.contains(k))].astype(float) # 可选:仅保留非空的DataFrame,避免存储无效数据 if not filtered_df.empty: # 用组合字符串作为字典键,方便后续调用 df_dict[f"{d}_{j}_{k}"] = filtered_df
步骤3:调用生成的DataFrame
后续可通过字典键直接访问对应的DataFrame,例如:
# 获取mon_AA_3bit对应的DataFrame target_df = df_dict['mon_AA_3bit']
额外优化建议
如果ITEM列格式固定(如day_jjj_xxx_xxx),可先拆分ITEM列生成新字段,再用groupby批量处理,效率更高:
# 拆分ITEM列提取day、jjj信息 df[['day_col', 'jjj_col', *_]] = df['ITEM'].str.split('_', n=2, expand=True) # 正则提取bit类型信息 df['bit_col'] = df['ITEM'].str.extract(r'(\d+bit)') # 按分组批量生成DataFrame并存入字典 df_dict = {} for (d, j, k), group_df in df.groupby(['day_col', 'jjj_col', 'bit_col']): df_dict[f"{d}_{j}_{k}"] = group_df.astype(float)
内容的提问来源于stack exchange,提问作者888Seeme
相关产品推荐
相关产品推荐

