熊猫连接问题:列重叠但未指定后缀

新手上路,请多包涵

我有以下数据框:

 print(df_a)
     mukey  DI  PI
0   100000  35  14
1  1000005  44  14
2  1000006  44  14
3  1000007  43  13
4  1000008  43  13

print(df_b)
    mukey  niccdcd
0  190236        4
1  190237        6
2  190238        7
3  190239        4
4  190240        7

当我尝试加入这些数据框时:

 join_df = df_a.join(df_b, on='mukey', how='left')

我收到错误:

 *** ValueError: columns overlap but no suffix specified: Index([u'mukey'], dtype='object')

为什么会这样?数据帧确实有共同的 'mukey' 值。

原文由 user308827 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 508
2 个回答

您发布的数据片段的错误有点神秘,因为没有共同的值,连接操作失败,因为值不重叠它需要您为左侧和右侧提供后缀:

 In [173]:

df_a.join(df_b, on='mukey', how='left', lsuffix='_left', rsuffix='_right')
Out[173]:
       mukey_left  DI  PI  mukey_right  niccdcd
index
0          100000  35  14          NaN      NaN
1         1000005  44  14          NaN      NaN
2         1000006  44  14          NaN      NaN
3         1000007  43  13          NaN      NaN
4         1000008  43  13          NaN      NaN

merge 有效,因为它没有此限制:

 In [176]:

df_a.merge(df_b, on='mukey', how='left')
Out[176]:
     mukey  DI  PI  niccdcd
0   100000  35  14      NaN
1  1000005  44  14      NaN
2  1000006  44  14      NaN
3  1000007  43  13      NaN
4  1000008  43  13      NaN

原文由 EdChum 发布,翻译遵循 CC BY-SA 3.0 许可协议

The .join() function is using the index of the passed as argument dataset, so you should use set_index or use .merge function instead.

请找到适用于您的情况的两个示例:

 join_df = LS_sgo.join(MSU_pi.set_index('mukey'), on='mukey', how='left')

要么

join_df = df_a.merge(df_b, on='mukey', how='left')

原文由 Velizar VESSELINOV 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题