Python使用循环批量导出多个pandas DataFrame为CSV并保留原名
问题原因
你的原始代码无法运行的核心原因是:frames列表中存储的是DataFrame对象本身,你直接把对象传入文件名格式化参数时,会尝试将整个DataFrame的内容转为字符串作为文件名,自然无法得到df1、df2的预期名称。
解决方案
方案1:使用字典关联DataFrame和对应名称
这是最直观易维护的方案,直接把文件名和DataFrame绑定,同时可以把两个循环合并提升效率:
import pandas as pd df1 = pd.DataFrame({'Col1':range(1,5), 'Col2':range(6,10)}) df2 = pd.DataFrame({'Col1':range(1,5), 'Col2':range(11,15)}) # 用字典存储,键为要保存的文件名,值为对应的DataFrame frames = {'df1': df1, 'df2': df2} for df_name, data in frames.items(): data['New'] = data['Col1'] + data['Col2'] # 直接用字典的键作为文件名 data.to_csv(f'C:/Users/User/Desktop/{df_name}.csv')
方案2:使用元组列表存储(适配原有列表写法习惯)
如果你更习惯用列表存储结构,也可以把名称和DataFrame打包成元组存入列表:
import pandas as pd df1 = pd.DataFrame({'Col1':range(1,5), 'Col2':range(6,10)}) df2 = pd.DataFrame({'Col1':range(1,5), 'Col2':range(11,15)}) frames = [('df1', df1), ('df2', df2)] for df_name, data in frames: data['New'] = data['Col1'] + data['Col2'] data.to_csv(f'C:/Users/User/Desktop/{df_name}.csv')
如果后续需要批量处理更多DataFrame,建议在生成DataFrame的阶段就直接存入字典,不需要额外手动维护名称映射关系。
内容的提问来源于stack exchange,提问作者Jack
相关产品推荐
相关产品推荐

