You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python如何合并多份结构相似但含额外列的CSV文件?

没问题!我来帮你搞定这个CSV合并的需求,用Python的pandas就能轻松实现,下面是具体步骤和代码示例:

多CSV文件合并方案(适配你的需求)

核心思路

  1. 读取所有目标CSV文件,给每个文件的第二列单独命名(避免冲突)
  2. 以第一列为关联键,用外连接合并所有数据,自动保留第一列的所有唯一值(包括各个文件里的新特征)
  3. 新增累加列,对所有来自原文件第二列的数值进行求和

具体代码实现

假设你的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 09:55:16