pandas横向拼接DataFrame出现行列数不符合预期问题排查
问题原因
pd.concat(axis=1)做横向拼接时,默认逻辑是按行索引的标签值做对齐匹配,根本不是按行从上到下的物理位置直接拼,这就是你结果维度完全不对的核心原因:
- 你手里的两个DataFrame虽然物理行数都是217,但行索引存在异常:要么两个表的索引值无法一一对应,要么索引里存在重复的标签。
- 拼接默认走外连接逻辑,会把两个表索引里出现过的所有值都保留,遇到同一个索引标签在两边出现多次的情况,会直接做笛卡尔积生成多行匹配结果,最后行数就从预期的217涨到了256;列数从预期的14变成22,也是索引错位匹配连带导致的异常。
正确实现方法
如果你的需求就是忽略原有索引,把两个表按从上到下的行顺序逐行横向拼接,先把两个表的索引重置为从0开始的连续整数、丢弃旧索引,再执行拼接即可:
# 重置索引,drop=True表示不把原索引保留为单独列 df_1_reset = df_1.reset_index(drop=True) df_2_reset = df_2.reset_index(drop=True) # 执行横向拼接 df = pd.concat([df_1_reset, df_2_reset], axis=1, ignore_index=True)
执行后得到的结果固定为217行、14列,完全符合逐行对齐拼接的预期。
注意:不要图省事跳过重置索引的步骤,哪怕两个表行数完全一致,只要索引顺序错乱、存在重复值,直接拼接要么会出现行数暴涨,要么会导致数据和行错位对应。
内容的提问来源于stack exchange,提问作者Malintha
相关产品推荐
相关产品推荐

