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