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.

user308827
quelle

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
EdChum
quelle
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')
Velizar VESSELINOV
quelle
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')
user1761806
quelle
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

user12690524
quelle