Masalah panda bergabung: kolom tumpang tindih tetapi tidak ada akhiran yang ditentukan


136

Saya memiliki 2 bingkai data berikut:

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

Ketika saya mencoba bergabung dengan 2 dataframe ini:

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

Saya mendapatkan kesalahan:

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

Kenapa begitu? Kerangka data memiliki nilai 'mukey' yang umum.

Jawaban:


145

Kesalahan Anda pada cuplikan data yang Anda poskan sedikit samar, karena karena tidak ada nilai umum, operasi gabungan gagal karena nilainya tidak tumpang tindih mengharuskan Anda untuk memberikan akhiran untuk sisi kiri dan kanan:

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 berfungsi karena tidak memiliki batasan ini:

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

The .join()fungsi menggunakan indexsatu lulus sebagai argumen dataset, sehingga Anda harus menggunakan set_indexatau menggunakan .mergefungsi bukan.

Temukan dua contoh yang cocok untuk Anda:

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

atau

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

27

Kesalahan ini menunjukkan bahwa kedua tabel memiliki 1 atau lebih nama kolom yang memiliki nama kolom yang sama. Pesan kesalahan diterjemahkan menjadi: "Saya bisa melihat kolom yang sama di kedua tabel tetapi Anda belum memberi tahu saya untuk mengganti nama sebelum membawa salah satu dari mereka"

Anda juga ingin menghapus salah satu kolom sebelum membawanya dari yang lain menggunakan del df ['nama kolom'], atau menggunakan lsuffix untuk menulis ulang kolom asli, atau rsuffix untuk mengganti nama salah satu yang dibawanya.

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

1

Terutama bergabung digunakan secara eksklusif untuk bergabung berdasarkan indeks, bukan pada nama atribut, jadi ubah nama atribut dalam dua kerangka data yang berbeda, kemudian cobalah untuk bergabung, mereka akan bergabung, kalau tidak kesalahan ini dinaikkan

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.