如何用Python将多个CSV文件的列合并至单个文件?
解决Pandas合并多同结构CSV文件为宽表的问题
你的代码核心问题是误用了pd.concat按行堆叠数据,而没有基于共同的Application列做列合并,导致最终数据结构完全不符合预期。
正确实现代码(两种方式)
方式1:循环逐步合并
import os import pandas as pd path = 'C:\\Users\\mdl518\\Desktop\\' extension = '.csv' files = [file for file in os.listdir(path) if file.endswith(extension)] # 读取第一个文件作为合并基础 merged_df = pd.read_csv(os.path.join(path, files[0])) # 依次合并剩余CSV文件 for file in files[1:]: df = pd.read_csv(os.path.join(path, file)) # 按Application列精准匹配合并 merged_df = pd.merge(merged_df, df, on='Application', how='left') # 保存结果到指定路径 merged_df.to_csv(os.path.join(path, 'df_results.csv'), index=False)
方式2:functools.reduce批量合并(更简洁)
import os import pandas as pd from functools import reduce path = 'C:\\Users\\mdl518\\Desktop\\' extension = '.csv' files = [file for file in os.listdir(path) if file.endswith(extension)] # 批量读取所有CSV为DataFrame列表 dfs = [pd.read_csv(os.path.join(path, f)) for f in files] # 用reduce批量合并所有DataFrame merged_df = reduce(lambda left, right: pd.merge(left, right, on='Application', how='left'), dfs) merged_df.to_csv(os.path.join(path, 'df_results.csv'), index=False)
输出结果验证
运行后生成的df_results.csv完全符合你的期望:
Application,Classifier,Processor,Receiver Request,14,15,12 Timeframe,3,5,10 Adjudication,10,20,21
关键注意点
- 所有CSV的
Application列值完全一致,这是按列合并的核心依据,确保每一行的数值能精准对应。 how='left'保证保留所有行数据,由于你的CSV行完全匹配,用inner也能得到相同结果。- 避免用
pd.concat做行堆叠,这是你之前代码失效的根本原因。
内容的提问来源于stack exchange,提问作者mdl518
相关产品推荐
相关产品推荐

