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

Pandas to_csv追加模式合并列不同的大量CSV文件遇列缺失问题

解决CSV流式合并时的列对齐问题

要解决缺失列导致的行错位问题,核心是先收集所有文件的列名,再让每个文件的DataFrame对齐到完整列集合后写入,具体步骤如下:

1. 收集所有出现过的列名

遍历所有文件,仅读取表头(无需加载全量数据),收集所有出现过的列,确保合并后的文件包含所有列:

import pandas as pd
from tqdm import tqdm

all_columns = set()
for f in tqdm(files):
    # 仅读取表头,避免加载全量数据
    with pd.read_csv(f, compression='infer', nrows=0) as df:
        all_columns.update(df.columns)
# 转换为列表,后续用于对齐列
all_columns = list(all_columns)

注:如果你的descomprime函数有特殊的解压/读取逻辑,只需替换成能获取该文件列名的方式即可,比如在descomprime里添加参数控制仅读取表头。

2. 流式写入时对齐列

遍历每个文件,将DataFrame重新索引到完整列集合(缺失列自动填充NaN),再追加写入目标文件:

entidad_csv = folder_entidad / f"{entidad.name.lower()}.csv"
file_exists = entidad_csv.exists()

for f in tqdm(files):
    df = descomprime(f)
    # 对齐到完整列集合,缺失列填充NaN
    df_aligned = df.reindex(columns=all_columns)
    # 首次写入时添加表头,后续追加不重复写表头
    df_aligned.to_csv(
        entidad_csv,
        index=False,
        mode="a",
        header=not file_exists
    )
    # 标记文件已存在,避免后续重复写表头
    if not file_exists:
        file_exists = True

关键说明

  • 收集列名阶段仅读取表头,内存占用极低,不会触发内存问题;
  • reindex方法会自动为当前文件缺失的列填充NaN,保证每行的列数与表头一致,避免错位;
  • 提前标记file_exists,避免每次写入都判断文件是否存在,提升效率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 02:22:17