使用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变量但未使用,不过这不会影响列数。
排查与修复步骤
检查列名一致性
先打印每个文件的列数和列名,对比找出差异:# 打印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"这种易忽略的差异。强制对齐列
- 只保留所有文件共有的列:
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)
- 只保留所有文件共有的列:
检查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
相关产品推荐
相关产品推荐

