如何利用enumerate参数命名DataFrame变量批量处理CSV文件
批量处理CSV文件生成对应DataFrame并导出的解决方案
问题背景
需要处理两个CSV文件(a.csv、b.csv),分别生成对应的结果DataFrame并导出为新CSV。原代码仅完成单个文件的处理,且需要手动定义df_a、df_b这类固定名称的空DataFrame,无法实现批量自动化处理,希望通过循环中的文件名参数动态处理每个文件。
原代码示例
list_files = ['a.csv', 'b.csv'] for i, file in enumerate(list_files): df = pd.read_csv(file) # 创建空DataFrame存储迭代结果 df_a = pd.DataFrame(columns=['start', 'end']) for index, row in df.iterrows(): var = df.loc[index, 'name'] df_new = SomeFunction(var) # 追加新行到空DataFrame dicts = {'start': df_new['column1'], 'end': df_new['column2']} df_dicts = pd.DataFrame([dicts]) df_a = pd.concat([df_a, df_dicts], ignore_index=True) df_a_csv = df_a.to_csv('df_a.csv')
改进后的批量处理代码
import pandas as pd list_files = ['a.csv', 'b.csv'] for file in list_files: df = pd.read_csv(file) # 为当前文件创建临时结果DataFrame,无需固定命名 result_df = pd.DataFrame(columns=['start', 'end']) for index, row in df.iterrows(): var = row['name'] # 直接用row取值更简洁 df_new = SomeFunction(var) # 构造行数据并追加 row_data = {'start': df_new['column1'], 'end': df_new['column2']} result_df = pd.concat([result_df, pd.DataFrame([row_data])], ignore_index=True) # 根据原文件名生成导出的CSV文件名,比如a.csv对应df_a.csv output_filename = f'df_{file}' result_df.to_csv(output_filename, index=False)
额外优化建议
循环中多次使用pd.concat效率较低,可以改用列表收集所有行数据,最后一次性生成DataFrame:
import pandas as pd list_files = ['a.csv', 'b.csv'] for file in list_files: df = pd.read_csv(file) data_rows = [] for index, row in df.iterrows(): var = row['name'] df_new = SomeFunction(var) data_rows.append({ 'start': df_new['column1'], 'end': df_new['column2'] }) # 一次性生成结果DataFrame result_df = pd.DataFrame(data_rows, columns=['start', 'end']) output_filename = f'df_{file}' result_df.to_csv(output_filename, index=False)
关键说明
- 无需提前定义
df_a、df_b这类固定变量,在循环内部为每个文件创建独立的result_df即可 - 使用原文件名动态生成导出的CSV名称,确保每个文件的结果对应正确
- 优化后的列表收集方式避免了多次
concat的性能损耗,处理大文件时更高效
内容的提问来源于stack exchange,提问作者user7665853
相关产品推荐
相关产品推荐

