Python如何合并多份结构相似但含额外列的CSV文件?
没问题!我来帮你搞定这个CSV合并的需求,用Python的pandas就能轻松实现,下面是具体步骤和代码示例:
多CSV文件合并方案(适配你的需求)
核心思路
- 读取所有目标CSV文件,给每个文件的第二列单独命名(避免冲突)
- 以第一列为关联键,用外连接合并所有数据,自动保留第一列的所有唯一值(包括各个文件里的新特征)
- 新增累加列,对所有来自原文件第二列的数值进行求和
具体代码实现
假设你的CSV文件都放在同一个文件夹里,比如命名为data1.csv、data2.csv,每列结构是:
特征列, 数值列
举个例子:data1.csv内容:
用户ID,消费金额 A,100 B,200 C,300
data2.csv内容:
用户ID,消费金额 B,150 C,250 D,350
代码如下:
import pandas as pd import os # 替换成你的CSV文件所在文件夹路径 folder_path = "./csv_files" # 获取文件夹里所有.csv格式的文件 csv_file_list = [f for f in os.listdir(folder_path) if f.endswith(".csv")] # 初始化空DataFrame存储合并结果 merged_result = pd.DataFrame() for file in csv_file_list: # 读取单个CSV文件 df = pd.read_csv(os.path.join(folder_path, file)) # 给第二列重命名,用文件名作为后缀(比如data1.csv的第二列叫"消费金额_data1") df.rename(columns={df.columns[1]: f"{df.columns[1]}_{file.split('.')[0]}"}, inplace=True) # 合并数据:外连接会保留所有第一列的唯一值,缺失值用NaN填充 if merged_result.empty: merged_result = df else: merged_result = pd.merge(merged_result, df, on=df.columns[0], how="outer") # 新增累加列:对所有带后缀的数值列求和,空值自动按0计算 merged_result["总金额"] = merged_result.filter(regex=f"^{df.columns[1]}_").sum(axis=1, skipna=True).fillna(0) # 保存合并后的结果到新文件 merged_result.to_csv("./merged_total.csv", index=False)
关键细节说明
- 列名重命名:每个文件的第二列会被加上文件名后缀,确保不同来源的数值列不会混淆
- 外连接合并:不管某个特征出现在多少个文件里,最终第一列都会保留所有唯一值,缺失的数值会用
NaN填充(如果需要把空值改成0,可以加一句merged_result.fillna(0, inplace=True)) - 累加列自动计算:通过正则匹配所有数值列,自动求和生成总列,不用手动指定列名
适配特殊情况的小调整
- 如果不同CSV的第一列列名不一致(比如有的叫"用户ID",有的叫"客户ID"),可以在读取时统一重命名:
df.rename(columns={df.columns[0]: "统一特征列"}, inplace=True),合并时on参数就用"统一特征列" - 如果你的CSV没有表头,读取时要加
header=None,然后手动命名列:df.columns = ["特征列", "数值列"]
这样处理后,你就能得到完全符合预期的合并文件:第一列包含所有唯一特征,每个原文件的第二列作为单独新列,最后还有一个累加的总列。
内容的提问来源于stack exchange,提问作者Tomas Kybartas
相关产品推荐
相关产品推荐

