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

Pandas中pd.concat合并DataFrames失败的原因及解决方法

Pandas合并DataFrame报错:Shape of passed values与indices不匹配的原因及解决办法

原因分析

这个报错的核心是DataFrame的索引元数据存在异常,并非数据本身的行列结构问题:

  • 使用inplace=True重置索引时,可能因原DataFrame是视图而非副本,导致索引修改未真正生效,残留了异常的索引结构;
  • 原DataFrame的索引可能存在隐藏的重复值或损坏,使得pd.concat计算预期行数时出现偏差;
  • 从to_dict()重建后能正常合并,也验证了问题出在DataFrame的元数据(而非数据内容)上。

解决方法

1. 替换inplace=True为赋值式重置索引

避免inplace操作带来的视图/副本问题,改用链式调用赋值:

df1 = all_predictions[1].head(3).reset_index(drop=True)[["key_id", "prediction", "yrmon"]]
df2 = all_predictions[2].head(3).reset_index(drop=True)[["key_id", "prediction", "yrmon"]]

2. 强制重建DataFrame清除异常元数据

直接用pd.DataFrame重新构造,彻底重置所有元数据:

# 方式一:基于原数据重建
df1 = pd.DataFrame(all_predictions[1].head(3), columns=["key_id", "prediction", "yrmon"]).reset_index(drop=True)
df2 = pd.DataFrame(all_predictions[2].head(3), columns=["key_id", "prediction", "yrmon"]).reset_index(drop=True)

# 方式二:用to_dict重建(已验证有效)
df1 = pd.DataFrame(all_predictions[1].head(3).to_dict("records"))[["key_id", "prediction", "yrmon"]]
df2 = pd.DataFrame(all_predictions[2].head(3).to_dict("records"))[["key_id", "prediction", "yrmon"]]

3. 检查并修复原索引异常

先排查索引是否有重复或损坏:

# 检查索引是否有重复
print(all_predictions[1].index.has_duplicates)
print(all_predictions[2].index.has_duplicates)

# 若有重复,先重置索引再处理
df1 = all_predictions[1].reset_index(drop=True).head(3)[["key_id", "prediction", "yrmon"]]
df2 = all_predictions[2].reset_index(drop=True).head(3)[["key_id", "prediction", "yrmon"]]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 11:11:10