2016-09-28 3 views
2

Warum funktioniert die innere Verbindung in Pandas so seltsam?Erklären, wie Pandas DataFrame bei der Arbeit funktioniert

Zum Beispiel:

import pandas as pd 
import io 

t1 = ('key,col1\n' 
     '1,a\n' 
     '2,b\n' 
     '3,c\n' 
     '4,d') 

t2 = ('key,col2\n' 
     '1,e\n' 
     '2,f\n' 
     '3,g\n' 
     '4,h') 


df1 = pd.read_csv(io.StringIO(t1), header=0) 
df2 = pd.read_csv(io.StringIO(t2), header=0) 

print(df1) 
print() 
print(df2) 
print() 
print(df2.join(df1, on='key', how='inner', lsuffix='_l')) 

Ausgänge:

key col1 
0 1 a 
1 2 b 
2 3 c 
3 4 d 

    key col2 
0 1 e 
1 2 f 
2 3 g 
3 4 h 

    key_l col2 key col1 
0  1 e 2 b 
1  2 f 3 c 
2  3 g 4 d 

Wenn ich lsuffix nicht angeben, heißt es

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

Ist diese Funktion Arbeit diff gerade von SQL's JOIN? Warum möchte es eine zusätzliche "Schlüssel" -Spalte mit einem Suffix erstellen? Warum gibt es nur 3 Reihen? ich es erwartet hatte Ausgabe etwas wie folgt aus:

key col1 col2 
0 1 a e 
1 2 b f 
2 3 c g 
3 4 d h 

Antwort

1

Das Wichtigste zuerst:
Was Sie wollten

df1.merge(df2) 

enter image description here


join defaults fusionieren war auf der index zu verschmelzenden . Sie können den Parameter on angeben, der nur angibt, welche Spalte von links mit dem Index der rechten Seite übereinstimmt.

könnte diese

df1.set_index('key').join(df2.set_index('key')) 

enter image description here

df1.join(df2.set_index('key'), on='key') 

enter image description here


Ihr Beispiel ist passend zu dem Index df2, die mit der key Säule vonwie [0, 1, 2, 3] sieht illustrieren helfendie wie [1, 2, 3, 4]
sieht Deshalb sollten Sie NaN in col2 erhalten, wenn key_l4 ist

df1.join(df2, on='key', lsuffix='_l', how='outer') 

enter image description here

+0

Dank. Was macht Join dann? – spiderface

+0

@spiderface arbeitete an einer umfassenderen Antwort. Post wurde aktualisiert. – piRSquared