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
相关产品推荐
相关产品推荐

