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

如何按列名排序DataFrame并合并多列不一致的Pandas数据集

合并列数/顺序不同的多个Pandas DataFrame的正确方法

直接可用的修改代码

import pandas as pd

def read_the_files(): 
    dfs = [] 
    for i in range(1,9):
        # 读取CSV,跳过自动生成的冗余索引列,避免Unnamed开头的列
        archivos_csv = pd.read_csv(f"DDFF_{i}.csv", index_col=False)
        # 可选:提前清理冗余列(如果读取后仍有Unnamed列)
        archivos_csv = archivos_csv.drop(columns=[col for col in archivos_csv.columns if col.startswith('Unnamed')])
        dfs.append(archivos_csv) 
    
    # 纵向合并,自动按列名对齐,缺失值填充NaN,重置行索引
    df_unido = pd.concat(dfs, ignore_index=True)
    
    # 按列名字母顺序排序,让结果更整洁(可选)
    df_unido = df_unido.sort_index(axis=1)
    
    return df_unido

result = read_the_files()

关键说明

  1. 自动列名对齐机制
    Pandas的pd.concat()默认纵向合并(axis=0)时,会自动根据列名匹配不同DataFrame的列,某个文件没有的列会自动填充NaN,完全不需要手动提前调整列顺序。你之前遇到的“结果错误”,几乎都是因为CSV文件里带了冗余的索引列(比如Unnamed:0、Unnamed:0.1)——这些是之前保存DataFrame时没加index=False导致的,用index_col=False读取即可避免。

  2. 按列名排序DataFrame
    要按列名而非行值排序DataFrame,直接调用df.sort_index(axis=1):

    • axis=1表示对列索引排序(按列名字母顺序)
    • axis=0是默认值,对行索引排序
  3. 进阶优化建议

    • 统一列名:如果不同文件里的同含义列名不同(比如A文件叫province,B文件叫state),先手动映射列名再合并,比如archivos_csv.rename(columns={'state':'province'}, inplace=True)
    • 检查合并结果:用print(df_unido.columns)查看所有列,用df_unido.info()统计每列的非空值数量,确认合并是否符合预期

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 07:50:22