Pandas拼接DataFrame行数不符的问题及索引重置方法
问题根因定位
你对问题的判断完全准确:拼接异常的核心原因是pd.concat的横向拼接逻辑是按索引标签严格对齐,而非按行的物理顺序匹配。
两边的索引错位情况:
title_w2v为连续无缺失索引,覆盖范围0~448,共449行df_fe为前期删行后留下的非连续索引,虽然实际行数是449行,但索引标签覆盖范围到0~452,存在索引缺失、标签不连续的问题
这种索引不匹配的状态下,直接执行concat会出现标签错位匹配,最终导致拼接结果的行数不符合预期。
可行解决方案
通过重置索引消除非连续标签带来的错位是完全可行的,操作时注意顺序,保证两个数据集的物理行顺序完全对应:
- 分别对两个数据集重置索引,丢弃原有的非连续索引,避免旧标签干扰:
# drop=True表示直接移除旧索引,不将旧索引作为新列保留 df_fe_clean = df_fe.reset_index(drop=True) title_w2v_clean = title_w2v.reset_index(drop=True) - 执行拼接操作:
此时两个数据集的索引均为连续的0~448,完全匹配,执行你原有的拼接代码即可得到预期的449行19列结果:df_result = pd.concat([df_fe_clean, title_w2v_clean], axis=1, join='inner')
避坑提醒
如果跳过重置索引步骤,即便使用join='inner',也无法得到正确结果:因为inner join只是取两个数据集索引标签的交集,无法自动校正物理行和索引标签的错位关系,最终拼接出来的行内容也会是错配的。
可以在拼接前增加一行校验代码,确认索引匹配后再执行拼接:
# 输出为True时再执行拼接,避免错位 print("索引对齐校验:", df_fe_clean.index.equals(title_w2v_clean.index))
额外提示:如果title_w2v是直接从df_fe中逐行提取生成的,重置索引后完全可以保证行顺序一致,不会出现内容错配的问题。
内容的提问来源于stack exchange,提问作者unaied
相关产品推荐
相关产品推荐

