Випуск приєднання до Pandas: стовпці перекриваються, але суфікс не вказано


136

У мене є наступні 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

Коли я намагаюся приєднатися до цих двох фреймів даних:

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

Я отримую помилку:

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

Чому це так? Рамки даних мають загальні значення "mukey".

Відповіді:


145

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

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

32

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

27

Ця помилка вказує на те, що у двох таблицях є 1 або більше назв стовпців, які мають однакове ім’я стовпця. Повідомлення про помилку означає: "Я можу побачити один і той же стовпець в обох таблицях, але ви не сказали мені перейменувати його, перш ніж вносити одну з них у"

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

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

1

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.