Pandas Join-Problem: Spalten überlappen sich, es wurde jedoch kein Suffix angegeben


136

Ich habe folgende 2 Datenrahmen:

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

Wenn ich versuche, diese beiden Datenrahmen zu verbinden:

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

Ich bekomme den Fehler:

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

Warum ist das so? Die Datenrahmen haben gemeinsame 'mukey'-Werte.

Antworten:


145

Ihr Fehler beim von Ihnen geposteten Datenausschnitt ist ein wenig kryptisch, da die Verknüpfungsoperation fehlschlägt, da sich die Werte nicht überschneiden. Daher müssen Sie ein Suffix für die linke und rechte Seite angeben:

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 funktioniert, weil es diese Einschränkung nicht gibt:

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

Die .join()Funktion verwendet das indexals Argument übergebene Dataset, daher sollten Sie stattdessen set_indexdie .mergeFunktion verwenden oder verwenden .

Hier finden Sie die beiden Beispiele, die in Ihrem Fall funktionieren sollten:

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

oder

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

26

Dieser Fehler weist darauf hin, dass die beiden Tabellen mindestens einen Spaltennamen mit demselben Spaltennamen haben. Die Fehlermeldung lautet wie folgt: "Ich kann in beiden Tabellen dieselbe Spalte sehen, aber Sie haben mir nicht gesagt, dass ich sie umbenennen soll, bevor ich eine davon einbringe."

Sie möchten entweder eine der Spalten löschen, bevor Sie sie mit del df ['Spaltenname'] von der anderen einfügen, oder lsuffix verwenden, um die ursprüngliche Spalte neu zu schreiben, oder rsuffix, um die Spalte umzubenennen, in die sie eingefügt wird.

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

1

Hauptsächlich wird Join ausschließlich zum Verknüpfen basierend auf dem Index und nicht auf der Grundlage der Attributnamen verwendet. Ändern Sie daher die Attributnamen in zwei verschiedenen Datenrahmen und versuchen Sie dann, eine Verknüpfung herzustellen. Diese werden dann verknüpft. Andernfalls wird dieser Fehler ausgelöst

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.