我有以下数据帧:
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”值。
你发布的数据片段上的错误有点神秘,因为没有共同的值,连接操作失败,因为值不重叠,它需要你为左边和右边提供一个后缀:
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
此错误指示两个表具有一个或多个具有相同列名的列名。
错误消息翻译为:“我可以在两个表中看到相同的列,但您没有告诉我在将它们带入同一表之前重命名它们”
您可以使用del df['column name']在将其中一列从另一列引入之前删除它,或者使用lsuffix重写原来的列,或者使用rsuffix重命名正在引入的列。
df_a.join(df_b, on='mukey', how='left', lsuffix='_left', rsuffix='_right')