Проблема соединения панд: столбцы перекрываются, но суффикс не указан


у меня есть следующие 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

когда я пытаюсь соединить эти 2 кадра данных:

join_df = df_a.join(df_b,on='mukey',how='left')

Я получаю ошибку:

*** ValueError: columns overlap but no suffix specified: Index([u'mukey'], dtype='object')

почему это так? Фреймы данных имеют общие значения 'mukey'.

3 79

3 ответа:

ваша ошибка в фрагменте данных, которые вы опубликовали, немного загадочна, потому что нет общих значений, операция соединения не выполняется, потому что значения не перекрываются, она требует, чтобы вы предоставили суффикс для левой и правой стороны:

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

The с помощью 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')

эта ошибка указывает на то, что две таблицы имеют 1 или более имен столбцов с одинаковым именем столбца. Сообщение об ошибке переводится следующим образом:"я вижу один и тот же столбец в обеих таблицах, но вы не сказали мне переименовать их, прежде чем вводить один из них"

вы либо хотите удалить один из столбцов, прежде чем вводить его из другого при использовании del df['имя столбца'], либо использовать lsuffix для перезаписи исходного столбца или rsuffix для переименования того, который вводится оно.

df_a.join(df_b, on='mukey', how='left', lsuffix='_left', rsuffix='_right')