use*_*827 119 python join pandas
我有以下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
Run Code Online (Sandbox Code Playgroud)
当我尝试加入这两个数据帧时:
join_df = df_a.join(df_b,on='mukey',how='left')
Run Code Online (Sandbox Code Playgroud)
我收到错误:
*** ValueError: columns overlap but no suffix specified: Index([u'mukey'], dtype='object')
Run Code Online (Sandbox Code Playgroud)
为什么会这样?数据帧确实具有常见的"mukey"值.
EdC*_*ica 119
您发布的数据片段上的错误有点神秘,因为没有常见值,连接操作失败,因为值不重叠,需要您为左侧和右侧提供后缀:
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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
Vel*_*NOV 22
该.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')
use*_*806 19
此错误表示两个表具有1个或多个具有相同列名的列名.该错误消息转换为:"我可以在两个表中看到相同的列,但您没有告诉我在将其中一个引入之前重命名"
您要么在使用del df ['column name']从另一列中删除其中一列之前删除其中一列,要么使用lsuffix重写原始列,或者使用rsuffix重命名正在使用它的那一列.
df_a.join(df_b, on='mukey', how='left', lsuffix='_left', rsuffix='_right')
Run Code Online (Sandbox Code Playgroud)
该错误表明两个表有 1 个或多个具有相同列名的列名。
任何遇到相同错误但不想提供后缀的人都可以重命名列。如果您不想提供设置,还要确保两个 DataFrame 的索引在类型和值上匹配on='mukey'。
# 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)
Run Code Online (Sandbox Code Playgroud)