Pandalar birleştirme sorunu: sütunlar örtüşüyor ancak son ek belirtilmemiş


136

Aşağıdaki 2 veri çerçevem ​​var:

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

Bu 2 veri çerçevesine katılmaya çalıştığımda:

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

Şu hatayı alıyorum:

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

Bu neden böyle? Veri çerçeveleri, ortak 'mukey' değerlerine sahiptir.

Yanıtlar:


146

Gönderdiğiniz veri parçacığındaki hatanız biraz şifreli, çünkü ortak değerler olmadığından, birleştirme işlemi başarısız oluyor çünkü değerler üst üste gelmiyor, sol ve sağ taraf için bir son ek sağlamanızı gerektiriyor:

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 çalışır çünkü bu kısıtlamaya sahip değildir:

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()Fonksiyon kullanıyor indexkullanmanız gerektiğini bu nedenle, bağımsız değişken veri kümesi olarak geçirilen bir set_indexveya kullanım .mergeyerine işlevi.

Lütfen durumunuzda çalışması gereken iki örneği bulun:

join_df = LS_sgo.join(MSU_pi.set_index('mukey'), on='mukey', how='left')

veya

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

27

Bu hata, iki tablonun aynı sütun adına sahip 1 veya daha fazla sütun adına sahip olduğunu gösterir. Hata mesajı şu şekilde çevrilir: "Her iki tabloda da aynı sütunu görebiliyorum, ancak bunlardan birini getirmeden önce ikisini de yeniden adlandırmamı söylemediniz"

Del df ['sütun adı'] kullanarak sütunlardan birini diğerinden getirmeden önce silmek ya da orijinal sütunu yeniden yazmak için lsuffix'i ya da getirileni yeniden adlandırmak için rsuffix'i kullanmak istersiniz.

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

1

Esas olarak birleştirme, öznitelik adlarına değil, yalnızca dizine göre birleştirmek için kullanılır, bu nedenle iki farklı veri çerçevesindeki öznitelik adlarını değiştirin, sonra katılmaya çalışın, birleştirilecek, aksi takdirde bu hata ortaya çıkar

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.