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

使用Python合并XLSX文件时列数异常问题排查

排查Python合并XLSX文件列数异常问题

问题描述

合并多个各含30列的XLSX文件后,输出文件列数变为31-32列,数据集结构错乱,使用的代码如下:

import pandas as pd

one = pd.read_excel('0403.xlsx')
two = pd.read_excel('0414.xlsx')
three = pd.read_excel('0415.xlsx')
combination = pd.concat([one,three], axis=0)

问题分析与解决

核心原因

pd.concat默认会保留所有参与合并的DataFrame中的列,只要列名存在差异(比如大小写、首尾空格、特殊字符、列名顺序不同),就会被识别为不同列,最终导致合并后列数增加。另外代码中定义了two变量但未使用,不过这不会影响列数。

排查与修复步骤

  1. 检查列名一致性
    先打印每个文件的列数和列名,对比找出差异:

    # 打印0403.xlsx的列信息
    print("0403列数:", len(one.columns))
    print("0403列名:", list(one.columns))
    # 打印0415.xlsx的列信息
    print("0415列数:", len(three.columns))
    print("0415列名:", list(three.columns))
    

    重点排查是否有类似"姓名"和" 姓名"(带空格)、"ID"和"id"这种易忽略的差异。

  2. 强制对齐列

    • 只保留所有文件共有的列:
      combination = pd.concat([one, three], axis=0, join='inner')
      
    • 以其中一个文件的列名为标准对齐,缺失列填充NaN:
      # 对齐three的列到one的列名
      three_aligned = three.reindex(columns=one.columns)
      combination = pd.concat([one, three_aligned], axis=0)
      
  3. 检查Excel隐藏列
    确认源Excel文件是否存在隐藏列,pd.read_excel默认会读取所有列(包括隐藏列)。如果有不需要的隐藏列,可以用usecols参数指定读取的列,比如:

    # 读取前30列
    one = pd.read_excel('0403.xlsx', usecols=range(30))
    three = pd.read_excel('0415.xlsx', usecols=range(30))
    

内容的提问来源于stack exchange,提问作者Akoma Dupsy Blessing

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 06:01:02