Python循环列表时如何以列表元素动态命名DataFrame?
解决方案:跳过动态命名DataFrame,直接处理后存文件
你完全不需要在循环里折腾动态命名DataFrame——这既没必要,还平白占内存。直接在循环里处理完每个子DataFrame就立刻存成Parquet文件,最后批量读取合并就行,刚好适配你内存不足的场景。
步骤1:循环处理并保存单个Parquet文件
import pandas as pd import os # 你的名称列表 name_list = ["foo", "bar", "baz"] # 临时存Parquet文件的目录(可自行修改路径) temp_dir = "./temp_parquets" os.makedirs(temp_dir, exist_ok=True) for name in name_list: # 复制原DataFrame df = prior_df.copy() # 替换成你的实际数据处理逻辑:新增以当前name命名的列并处理 df[name] = df["目标列"].apply(你的处理函数) # 示例逻辑,按需修改 # 保存为带名称标识的Parquet文件 file_path = os.path.join(temp_dir, f"df_{name}.parquet") df.to_parquet(file_path, index=False) # 内存紧张时手动释放当前df的内存 del df
步骤2:批量读取并合并所有Parquet文件
# 获取所有生成的Parquet文件路径 parquet_files = [os.path.join(temp_dir, f) for f in os.listdir(temp_dir) if f.endswith(".parquet")] # 批量读取并合并成最终DataFrame final_df = pd.concat([pd.read_parquet(file) for file in parquet_files], axis=0, ignore_index=True) # 可选:清理临时文件 for f in parquet_files: os.remove(f) os.rmdir(temp_dir)
为什么这能解决你的问题?
- 彻底绕开动态命名变量的麻烦:循环里的DataFrame存完就销毁,不会一直占内存
- 内存占用可控:每次只处理单个子DataFrame,内存始终维持在单个df的大小,不会累积膨胀
- 合并阶段灵活:如果生成的Parquet文件极多,还可以分批次读取合并,进一步降低内存压力
内容的提问来源于stack exchange,提问作者jayjunior
相关产品推荐
相关产品推荐

