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

使用Pandas concat合并Excel文件时列数不符的问题排查

Pandas合并Excel数据列数不符问题解析

问题场景

示例数据

f1.xlsx数据:

id na ln 
a1 b1 c1
a2 b2 c2 
k1 k2 k3

f2.xlsx数据:

jd kd rd md nd pd  
a1 b1 c1 d1 e1 f1
a2 b2 c2 d2 e2 f2
a3 b3 c3 d3 e3 f3

执行代码

尝试通过以下代码合并两文件数据:

import pandas as pd
df1 = pd.read_excel('f1.xlsx', usecols=[0,1,2], header=None)
df2 = pd.read_excel('f2.xlsx', usecols=[0,4,5], header=None)
merge_df = pd.concat([df1 ,df2])

异常结果

合并后得到5列(列名0、1、2、4、5),而非期望的3列,输出如下:

0    1    2    4    5
0  id   na   ln  NaN  NaN
1  a1   b1   c1  NaN  NaN
2  a2   b2   c2  NaN  NaN
3  k1   k2   k3  NaN  NaN
0  jd  NaN  NaN   nd   pd
1  a1  NaN  NaN   e1   f1
2  a2  NaN  NaN   e2   f2
3  a3  NaN  NaN   e3   f3

但将f2另存为3列后用usecols=[0,1,2]读取,合并就能得到3列。

问题原因

核心在于**usecols参数会保留原Excel的列索引**:

  • 读取df1时,usecols=[0,1,2]对应原Excel前3列,DataFrame列名被设为0、1、2
  • 读取df2时,usecols=[0,4,5]对应原Excel第1、5、6列,DataFrame会保留原列索引0、4、5,不会重新从0开始编号

pd.concat()合并时会按列名对齐:df1的列0、1、2和df2的列0、4、5合并后,就会生成5列,缺失数据的位置填充NaN。

而将f2另存为3列后,usecols=[0,1,2]读取的列索引就是0、1、2,和df1列名完全一致,合并时自然对齐为3列。

解决方法

只需确保两个DataFrame的列名一致即可,以下两种常用方式:

方式1:读取后重命名df2的列

import pandas as pd
df1 = pd.read_excel('f1.xlsx', usecols=[0,1,2], header=None)
df2 = pd.read_excel('f2.xlsx', usecols=[0,4,5], header=None)
# 将df2列名改为和df1一致
df2.columns = [0, 1, 2]
merge_df = pd.concat([df1, df2])

方式2:读取时直接指定列名

import pandas as pd
# 读取时通过names参数统一列名
df1 = pd.read_excel('f1.xlsx', usecols=[0,1,2], header=None, names=[0,1,2])
df2 = pd.read_excel('f2.xlsx', usecols=[0,4,5], header=None, names=[0,1,2])
merge_df = pd.concat([df1, df2])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 19:14:53