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

合并不同列数Pandas DataFrame时报错Plan shapes are not aligned如何解决

问题原因

你遇到的ValueError: Plan shapes are not aligned报错,核心是两个DataFrame做轴向拼接时结构无法对齐,常见触发原因有三个:

  • 代码中变量名错误,你示例拼接代码写的是[df, df2],若你的第一个表实际变量名是df1就会触发错误
  • 两个DataFrame的列结构存在隐藏不一致(比如某张表有多级列索引、重复列名,或者你示例中df1的最后一行多出来一个值,实际可能存在列数和列名不匹配的问题)
  • 低版本pandas对列数不一致的表纵向拼接的兼容性不足

解决方案

方案1:补全列结构后拼接(最稳妥)

先把少列的df2按照df1的列结构补全,缺失列自动填充NaN后再拼接,完全避免对齐问题:

# 给df2补全和df1完全一致的列结构
df2_extend = df2.reindex(columns=df1.columns)
# 纵向拼接
df3 = pd.concat([df1, df2_extend], axis=0, ignore_index=True)

方案2:先校验结构再操作

如果执行方案1仍报错,先运行以下代码确认两张表的实际结构是否符合预期,排除列数/列索引异常:

# 输出df1的列名、行列数
print("df1列名:", df1.columns.tolist())
print("df1行列数:", df1.shape)
# 输出df2的列名、行列数
print("df2列名:", df2.columns.tolist())
print("df2行列数:", df2.shape)

如果输出发现存在列名重复、多级索引、列数和预期不符的情况,先修正表结构再执行拼接即可。

方案3:强制数组拼接(极端场景备用)

如果仅需要数据合并不需要保留原有索引逻辑,可转成numpy数组强制拼接后再转回DataFrame:

import numpy as np
# 拼接数组后转DataFrame,沿用df1的列名
df3 = pd.DataFrame(
    np.vstack([df1.values, df2.reindex(columns=df1.columns).values]),
    columns=df1.columns
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 08:27:03