pandasjoin问题:列重叠但没有指定后缀

我有以下2个dataframe:

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 df_b = mukey niccdcd 0 190236 4 1 190237 6 2 190238 7 3 190239 4 4 190240 7 

当我尝试join这两个数据框时:

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

我得到的错误:

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

这是为什么? 数据框确实有共同的“mukey”值。

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

 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 

.join()函数使用作为参数数据集传递的index ,因此应该使用set_index或使用.merge函数。

请找出适用于您的案例的两个例子:

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

此错误表示这两个表具有一个或多个具有相同列名称的列名称。 错误消息转换为:“我可以在两个表中看到相同的列,但您没有告诉我重新命名,

您可以在使用del df ['列名']将其中一列从另一列删除之前删除其中一列,或者使用lsuffix重新写入原始列,或者使用rsfs命令重命名正在导入的列。

 df_a.join(df_b, on='mukey', how='left', lsuffix='_left', rsuffix='_right')