合并两个数据帧后的NaNs

时间:2017-03-14 09:20:11

标签: python pandas

我有两个数据帧,如下所示:

DF1

         id         name
-------------------------
0        43          c
1        23          t
2        38          j
3         9          s

DF2

          user        id
--------------------------------------------------
0         222087      27,26
1         1343649     6,47,17
2         404134      18,12,23,22,27,43,38,20,35,1
3         1110200     9,23,2,20,26,47,37

我想将df2中的所有ID拆分为多行,并将结果数据帧连接到“id”上的df1。

我执行以下操作:

b = pd.DataFrame(df2['id'].str.split(',').tolist(), index=df2.user_id).stack()
b = b.reset_index()[[0, 'user_id']] # var1 variable is currently labeled 0
b.columns = ['Item_id', 'user_id'] 

当我尝试合并时,我在结果数据帧中得到NaN。

pd.merge(b, df1, on = "id", how="left")

              id       user      name
-------------------------------------
0              27      222087     NaN
1              26      222087     NaN
2              6      1343649     NaN
3              47     1343649     NaN
4              17     1343649     NaN

所以,我尝试了以下操作:

b['name']=np.nan
for i in range(0, len(df1)):
    b['name'][(b['id'] == df1['id'][i])] = df1['name'][i]

它仍然给出与上面相同的结果。我很困惑,因为我确信它们都应该起作用! 任何帮助将非常感激!

我在SO上阅读了类似的帖子,但似乎没有一个具体的答案。我也不确定这与编码有什么关系。

提前致谢!

1 个答案:

答案 0 :(得分:1)

问题是您需要将id中的df2列转换为int,因为string函数的输出始终为string,如果使用数字也是如此。

df2.id = df2.id.astype(int)

另一种解决方案是将df1.id转换为string

df1.id = df1.id.astype(str)

获取NaN,因为没有匹配 - str值与int值不匹配。