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

使用pd.concat(axis=1)合并数据集后右侧出现NaN的解决方法

问题根源

使用pd.concat([df1, df2], axis=1)横向合并时,Pandas默认按**索引(index)**对齐数据。即使合并前两个数据集无缺失值,只要索引不匹配(比如索引值不一致、行数不同),就会导致其中一侧出现NaN——因为Pandas会为找不到对应索引的行填充缺失值。

解决方法

1. 先检查索引与行数

先确认两个数据集的索引和行数是否匹配:

# 查看索引
print(df1.index)
print(df2.index)
# 查看行数
print(len(df1), len(df2))

2. 重置索引后合并(按行位置对齐)

如果原索引无业务意义,直接重置索引再合并,确保按行的物理位置对齐:

df1_reset = df1.reset_index(drop=True)
df2_reset = df2.reset_index(drop=True)
df_both = pd.concat([df1_reset, df2_reset], axis=1)

也可以直接在concat中添加ignore_index=True参数(会重置合并后的列索引):

df_both = pd.concat([df1, df2], axis=1, ignore_index=True)

⚠️ 注意:此方法要求两个数据集行数完全一致,否则行数少的一侧仍会被补NaN。

3. 按业务主键合并(更精准)

如果两个数据集有共同的业务标识列(如user_id、order_no),建议用pd.merge替代concat,按主键精准对齐:

# 按共同主键id做内连接(只保留两边都有的记录)
df_both = pd.merge(df1, df2, on='id', how='inner')
# 若要保留df1的所有记录,用左连接
# df_both = pd.merge(df1, df2, on='id', how='left')

4. 处理行数不一致的情况

如果两个数据集行数不同,先排查原因:是否有数据筛选、遗漏?若确认数据完整,可根据业务需求选择:

  • 截断行数多的数据集,与少的保持一致:df1 = df1.iloc[:len(df2)]
  • 为行数少的数据集补全缺失行(需根据业务逻辑填充默认值)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 16:45:36