Подтвердить что ты не робот

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

Когда я пытаюсь объединить эти 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".

4b9b3361

Ответ 1

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

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

Ответ 2

Функция .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')

Ответ 3

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

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

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