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".
Ответы
Ответ 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')