pd.concat合并DataFrame时行首出现NaN值、数据右移如何解决?
问题原因
pd.concat 默认按列索引名称对齐进行纵向拼接:
- df_1的列索引为 [1,2,3],不存在列索引0
- df_2的列索引为 [0,1,2],不存在列索引3
拼接后会自动合并所有列索引得到 [0,1,2,3] 共4列,df_1所有行没有列0的值所以填充NaN,视觉上表现为原df_1的记录整体右移。另外你原有代码的排序逻辑未赋值/加inplace=True,不会修改new_df本身。
解决方案
根据使用场景选择对应方案即可:
方案1:统一两个DataFrame的列索引后拼接(最常用,适合两表对应列含义一致的场景)
如果df_1的第1列和df_2的第0列是同一个含义,直接重命名列索引保持一致后再拼接:
import pandas as pd # 把df_1的列索引修改为和df_2一致 df_1.columns = [0,1,2] # ignore_index参数可重置行索引,避免重复 new_df = pd.concat([df_1, df_2], ignore_index=True) # 排序需要赋值给新变量或者加inplace=True才会生效 new_df = new_df.sort_values(new_df.columns[0], ascending=True)
方案2:按列位置拼接不匹配列名(适合不需要保留原有列名的场景)
直接读取两个表的数值拼接后再转为DataFrame,完全忽略原有列索引:
import pandas as pd import numpy as np new_df = pd.DataFrame(np.concatenate([df_1.values, df_2.values]), columns=[0,1,2]) new_df = new_df.sort_values(0, ascending=True)
内容的提问来源于stack exchange,提问作者StressedBoi69420
相关产品推荐
相关产品推荐

