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

使用Pandas基于独立列名文件合并多CSV文件的问题

解决CSV文件列缺失合并问题的完整方案

我来帮你搞定这个CSV合并的问题,你的核心需求是用指定的列模板补全每个文件的缺失列后再合并,原来的代码主要有两个问题:一是每次循环都在覆盖merged_data(你每次都把当前文件追加到自己身上,然后直接保存,之前的文件数据都丢了),二是没有处理列不匹配的情况。下面是完整的解决方案:

核心思路

  1. 提前用模板列初始化一个空的DataFrame,确保合并后的结构统一
  2. 遍历每个CSV文件时,用reindex方法将文件的列对齐到模板列,缺失列自动填充默认值(比如NaN或空字符串)
  3. 用pd.concat高效合并所有对齐后的DataFrame(pandas已不推荐使用append方法)

完整代码实现

import pandas as pd
import glob
import os

def fetch_merge_sheets(input_path, output_path, output_filename, temp_columns):
    # 初始化空的合并DataFrame,指定模板列
    merged_data = pd.DataFrame(columns=temp_columns)
    # 获取input_path下所有CSV文件(用os.path.join避免路径分隔符问题)
    input_files = glob.glob(os.path.join(input_path, "*.csv"))
    
    for file in input_files:
        # 跳过列模板文件(如果它在input_path目录下的话)
        if "列模板文件名.csv" in file:  # 替换成你的列模板文件名
            continue
        # 读取当前CSV文件
        file_df = pd.read_csv(file)
        # 对齐到模板列,缺失列填充NaN(可自定义fill_value,比如fill_value="")
        aligned_df = file_df.reindex(columns=temp_columns, fill_value=pd.NA)
        # 追加到合并数据中,重置索引避免重复
        merged_data = pd.concat([merged_data, aligned_df], ignore_index=True)
    
    # 保存合并后的文件
    output_full_path = os.path.join(output_path, output_filename)
    merged_data.to_csv(output_full_path, index=False)

# ---------------------- 使用示例 ----------------------
# 1. 读取列模板文件获取列名列表(假设你的列模板文件是一行列名)
temp_header_df = pd.read_csv("path/to/你的列模板文件.csv", header=None)
temp_columns = temp_header_df.iloc[0].tolist()

# 2. 调用合并函数
fetch_merge_sheets(
    input_path="path/to/你的CSV文件夹",
    output_path="path/to/输出文件夹",
    output_filename="合并结果.csv",
    temp_columns=temp_columns
)

关键细节解释

  • reindex方法:这是处理列不匹配的核心,它会将当前文件的列与模板列对齐,存在的列保留原有数据,缺失的列填充你指定的默认值(默认是NaN)
  • os.path.join:替代手动拼接路径,解决Windows和Linux路径分隔符不一致的问题,避免出现路径错误
  • pd.concat:比append更高效且符合pandas的未来发展方向,ignore_index=True会重置合并后的索引,避免出现重复索引

效果验证

用你给出的示例数据测试:
csv1内容:

col1,col3
A,B

csv2内容:

col1,col2
C,D

csv3内容:

col1,col2
E,F

模板列:['col1','col2','col3']

合并后的CSV内容(填充pd.NA的话,保存后会显示为空):

col1,col2,col3
A,,B
C,D,
E,F,

内容的提问来源于stack exchange,提问作者Christopher John Reyes

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 11:02:32