如何合并多个DataFrame并写入指定文件夹CSV?请求代码修复
代码问题分析与优化方案
原代码核心问题
- 循环逻辑错误:第二个
for循环每次将df变量覆盖为单个文件的DataFrame,而非向初始列表追加数据,最终df仅保留最后一个文件的内容 - 无效冗余代码:第一个
for循环仅计算文件路径但未实际使用 - 合并逻辑错误:尝试遍历单个DataFrame的列执行
pd.concat,完全不符合多文件合并逻辑 - 文件保存逻辑错误:覆盖传入的
output_folder_path变量,且仅保存最后一个文件的DataFrame,而非合并结果 - 变量使用混乱:
cleaned_df的初始化、赋值和追加操作完全不符合预期
优化后的代码
import os import pandas as pd def clean_files(input_folder_path, output_folder_path): # 获取目标文件夹下所有CSV文件 csv_list = [file for file in os.listdir(input_folder_path) if file.endswith('.csv')] # 初始化列表存储每个文件的清理后DataFrame cleaned_dfs = [] # 遍历处理每个CSV文件 for file in csv_list: file_full_path = os.path.join(input_folder_path, file) # 读取文件并跳过前5行 df = pd.read_csv(file_full_path, skiprows=5, low_memory=False) cleaned_dfs.append(df) # 保存单个清理后的文件到输出目录 single_output_path = os.path.join(output_folder_path, f"cleaned_{file}") df.to_csv(single_output_path, index=False) # 合并所有清理后的DataFrame为单个DataFrame merged_df = pd.concat(cleaned_dfs, ignore_index=True) # 保存合并后的总文件 merged_output_path = os.path.join(output_folder_path, "cleaned_merged_all.csv") merged_df.to_csv(merged_output_path, index=False) # 返回合并后的DataFrame和单个文件的DataFrame列表 return merged_df, cleaned_dfs
优化说明
- 修正循环逻辑:遍历文件时将每个清理后的DataFrame追加到列表,避免变量覆盖
- 移除冗余代码:删除未使用的无效循环
- 正确实现合并:使用
pd.concat合并列表中所有DataFrame,添加ignore_index=True重置索引避免重复 - 完善文件保存:同时保存单个清理文件与合并后的总文件,不覆盖传入的路径参数
- 变量命名更清晰:用
cleaned_dfs明确存储多文件DataFrame的用途,避免混淆
内容的提问来源于stack exchange,提问作者pankaj sonawane
相关产品推荐
相关产品推荐

