包含数字和字符串值的对象类型键上的 Pandas 合并问题

itt*_*ill 3 python merge dataframe python-3.x pandas

我有两个数据帧 df1 和 df2,如下所示:-

df1 = pd.DataFrame({'x': [1, '3', 5,'t','m','u'],'y':[2, 4, 6, 4, 4, 8]})

df2 = pd.DataFrame({'x': [1, 3, '4','t'],'z':[2, 4, 6,7]})
Run Code Online (Sandbox Code Playgroud)

我正在尝试将两个数据框合并(左连接)为:-

df=pd.merge(df1, df2, how='left', on='x')
Run Code Online (Sandbox Code Playgroud)

输出是:-

df
Out[25]: 
   x  y    z
0  1  2  2.0
1  3  4  NaN
2  5  6  NaN
3  t  4  7.0
4  m  4  NaN
5  u  8  NaN
Run Code Online (Sandbox Code Playgroud)

显然,对于上面的第二行,即 x=3,我想要 z=4 而不是 NaN。在合并期间是否可以选择定义键的数据类型或任何其他解决方法,我可以将键的 dtype 更改为两个数据帧中的字符串并获得所需的输出。

Sco*_*ton 10

您可以使用assign临时将新的 dtype 分配给 x 列:

pd.merge(df1.assign(x=df1.x.astype(str)), 
         df2.assign(x=df2.x.astype(str)), 
         how='left', on='x')
Run Code Online (Sandbox Code Playgroud)

输出:

   x  y    z
0  1  2  2.0
1  3  4  4.0
2  5  6  NaN
3  t  4  7.0
4  m  4  NaN
5  u  8  NaN
Run Code Online (Sandbox Code Playgroud)