Pandas join问题:列重叠但未指定后缀

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)

  • join在index上工作,在列上合并工作 - 但是这可以被left_index/right_index覆盖 - 所以merge比join更通用. (2认同)

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

  • 小男孩,是那种"大熊猫"的骗子.它通过`on`列**加入**到`Index`,而不是. (6认同)
  • 我想补充一点,“set_index”必须应用于两侧,然后它比“merge”显着提高性能。 (2认同)

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)


Joe*_*ert 9

该错误表明两个表有 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)