我有以下2个数据框:
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_df = df_a.join(df_b,on='mukey',how='left')
我收到错误:
*** ValueError: columns overlap but no suffix specified: Index([u'mukey'], dtype='object')
为什么会这样?数据框确实具有常见的“mukey”值。
答案 0 :(得分:101)
您发布的数据片段上的错误有点神秘,因为没有常见值,连接操作失败,因为值不重叠,需要您为左右手提供后缀侧:
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
答案 1 :(得分:18)
.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')
答案 2 :(得分:16)
此错误表示两个表具有1个或多个具有相同列名的列名。该错误消息转换为:“我可以在两个表中看到相同的列,但您没有告诉我在将其中一个引入之前重命名”
您要么在使用del df ['column name']从另一列中删除其中一列之前删除其中一列,要么使用lsuffix重写原始列,或者使用rsuffix重命名正在使用的列之一带来了它。
df_a.join(df_b, on='mukey', how='left', lsuffix='_left', rsuffix='_right')
答案 3 :(得分:3)
错误说明两个表有1个或多个列名相同的列名。
遇到相同错误但不想提供后缀的任何人都可以改为重命名列。如果您不想提供 on='mukey'
设置,还要确保两个 DataFrame 的索引在类型和值上匹配。
# rename example
df_a = df_a.rename(columns={'a_old': 'a_new', 'a2_old': 'a2_new'})
# set the index
df_a = df_a.set_index(['mukus'])
df_b = df_b.set_index(['mukus'])
df_a.join(df_b)
答案 4 :(得分:2)
主要连接是专门用于基于索引的连接,而不是基于属性名称的连接,因此请在两个不同的数据框中更改属性名称,然后尝试连接,它们将被连接,否则会出现此错误