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

合并两个DataFrame时列A出现大量NaN,求正确实现方案

解决DataFrame合并时出现大量NaN的问题

嘿,我明白你遇到的困扰了!你用pd.concat([df2,df1], axis=1)合并时出现大量NaN,是因为默认的外连接(outer join)会保留两个DataFrame的所有索引——df2里的索引1、3在df1中没有对应的数据,所以A列这些位置就显示NaN。而你想要的是只保留两个DataFrame索引重叠的部分,并且让对应的值正确对齐,下面给你几种简单的解决方法:

方法1:给concat指定join='inner'

直接在concat里添加join='inner'参数,这样只会保留两个DataFrame共有的索引(也就是2、4、5、6),对应的数据会自动对齐:

import pandas as pd

df1 = pd.DataFrame({'A': [100, 120, 150, 130]}, index=[2, 4, 5, 6])
df2 = pd.DataFrame({'X': [200,230,210,220,245,260], 'Y': [300,330,300,360,310,390]}, index=[1,2,3,4,5,6])

# 用inner join合并
df3 = pd.concat([df2, df1], axis=1, join='inner')
print(df3)

运行后输出的结果就是你期望的:

X    Y    A
2  230  330  100
4  220  360  120
5  245  310  150
6  260  390  130

方法2:使用join方法并指定内连接

DataFrame的join方法也能实现同样的效果,只需要指定how='inner':

df3 = df2.join(df1, how='inner')

这个方法和上面的concat效果完全一致,都是保留共同索引并合并数据。

方法3:用merge按索引合并

如果你习惯用merge,可以通过指定按索引匹配,同时设置内连接:

df3 = pd.merge(df2, df1, left_index=True, right_index=True, how='inner')

这种方式同样能得到你想要的结果,适合习惯用merge语法的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:04:14