加入并结束一系列NaN的结果

时间:2018-04-23 11:23:48

标签: python pandas join concat

我需要帮助将两个数据帧组合在一起:

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])

我需要获得 df3 =

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

然而,当我使用concat([df2,df1],axis = 1)`时,我在A列上得到了一堆NaN:

print (pd.concat([df2,df1],axis=1))
     X    Y      A
1  200  300    NaN
2  230  330    NaN
3  210  300    NaN
4  220  360    NaN
5  245  310    NaN
6  260  390    NaN

哪个应该是解决此问题的最佳方法?

1 个答案:

答案 0 :(得分:0)

预期,因为concatjoin中的索引值对齐DataFrame

print (pd.concat([df2,df1],axis=1))
     X    Y      A
1  200  300    NaN
2  230  330  100.0 <-index 2 from df2 is aligned with row with index 2 in df1
3  210  300    NaN
4  220  360  120.0
5  245  310  150.0
6  260  390  130.0

编辑:

您的索引值似乎有不同的dtype s:

df2.index = df2.index.astype(str)

print (df1.index)
Int64Index([2, 4, 5, 6], dtype='int64')

print (df2.index)
Index(['1', '2', '3', '4', '5', '6'], dtype='object')

print (pd.concat([df2,df1],axis=1))
       X      Y      A
1  200.0  300.0    NaN
2  230.0  330.0    NaN
3  210.0  300.0    NaN
4  220.0  360.0    NaN
5  245.0  310.0    NaN
6  260.0  390.0    NaN
2    NaN    NaN  100.0
4    NaN    NaN  120.0
5    NaN    NaN  150.0
6    NaN    NaN  130.0

解决方案是转换索引值:

df2.index = df2.index.astype(int)
print (pd.concat([df2,df1],axis=1))
     X    Y      A
1  200  300    NaN
2  230  330  100.0
3  210  300    NaN
4  220  360  120.0
5  245  310  150.0
6  260  390  130.0