如何将文件夹中多个CSV文件合并为单文件并添加源文件名列、去重
CSV多文件合并问题解决方案
错误根因
- 空DataFrame初始化放在了for循环内部,导致每次循环都会清空之前已经合并的所有数据,最终仅保留最后一次循环的文件内容
- 未过滤隐藏文件和非CSV格式文件,会触发读取异常
- 去重逻辑未指定判断重复的列,默认按全列匹配去重,不符合按Name+Surname去重的需求
修正后完整代码
import os import pandas as pd PATH_DATA_FOLDER = 'mypath/' # 空总表必须放在循环外初始化 df_total = pd.DataFrame(columns=['Name', 'Surname', 'Country', 'File']) for file_name in os.listdir(PATH_DATA_FOLDER): # 过滤隐藏文件、非CSV文件,避免读取错误 if not file_name.endswith('.csv') or file_name.startswith('.'): continue # 读取单个CSV文件 temp_df = pd.read_csv(os.path.join(PATH_DATA_FOLDER, file_name)) # 新增列存储原始文件名 temp_df['File'] = file_name # 追加到总表,用concat替代已废弃的append方法,效率更高 df_total = pd.concat([df_total, temp_df], ignore_index=True) # 按Name和Surname字段去重,keep参数可选first(保留首次出现)/last(保留末次出现) df_total = df_total.drop_duplicates(subset=['Name', 'Surname'], keep='first').reset_index(drop=True) # 导出合并结果到CSV df_total.to_csv(os.path.join(PATH_DATA_FOLDER, 'merged_output.csv'), index=False, encoding='utf-8-sig')
补充说明
如果合并的文件体积较大,可以调整为按批次读取写入的逻辑,避免内存占用过高。
内容的提问来源于stack exchange,提问作者LdM
相关产品推荐
相关产品推荐

