Проблема соединения панд: столбцы перекрываются, но суффикс не указан
у меня есть следующие 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 ответа:
ваша ошибка в фрагменте данных, которые вы опубликовали, немного загадочна, потому что нет общих значений, операция соединения не выполняется, потому что значения не перекрываются, она требует, чтобы вы предоставили суффикс для левой и правой стороны:
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')