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

Python如何合并2个以上同类CSV文件并自动补齐缺失字段?

CSV多文件按主键合并实现方案

你给出的场景主键为每行的前两列组成的复合主键,合并逻辑为每个主键对应不同文件的第三列值按顺序追加,缺失值填充nan,可通过以下两种方案实现:

方案1:Python标准库实现(无需额外安装依赖)

直接使用Python内置的csv模块完成,适合不想安装第三方库的场景:

import csv
# 配置你的输入CSV文件路径,按合并的顺序填写,支持2个以上文件
input_files = ["file1.csv", "file2.csv"]
output_file = "merged_result.csv"

data = {}
file_count = len(input_files)

# 遍历所有输入文件,收集数据
for file_idx, file_path in enumerate(input_files):
    with open(file_path, "r", encoding="utf-8", newline="") as f:
        reader = csv.reader(f)
        for row in reader:
            # 跳过空行
            if len(row) < 3:
                continue
            # 前两列作为复合主键
            primary_key = (row[0], row[1])
            current_value = row[2]
            # 主键不存在则初始化值列表,默认全为nan
            if primary_key not in data:
                data[primary_key] = ["nan"] * file_count
            # 填充当前文件对应位置的值
            data[primary_key][file_idx] = current_value

# 写入合并后的结果
with open(output_file, "w", encoding="utf-8", newline="") as f:
    writer = csv.writer(f)
    for key, values in data.items():
        # 把主键的两个字段和值列表拼接成完整行
        writer.writerow(list(key) + values)

运行后输出的merged_result.csv就是你需要的结果。

方案2:Pandas实现(代码更简洁,适合处理大文件)

如果你已经安装了Pandas,用以下几行代码即可完成:

import pandas as pd

input_files = ["file1.csv", "file2.csv"]
df_list = []
for idx, file in enumerate(input_files):
    # 读取CSV,指定列名,将前两列设为索引
    df = pd.read_csv(file, header=None, names=["type", "id", f"val_{idx}"])
    df = df.set_index(["type", "id"])
    df_list.append(df)

# 按索引合并,缺失值填充nan
merged_df = pd.concat(df_list, axis=1).fillna("nan")
# 重置索引后输出为CSV,不保留索引和表头
merged_df.reset_index().to_csv("merged_result.csv", header=False, index=False)

内容的提问来源于stack exchange,提问作者iamgroot

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 17:15:06