合并两个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
相关产品推荐
相关产品推荐

