2016-07-07 6 views
13

Pandas eignet sich hervorragend für die Behandlung eines sehr breiten Spektrums von Anwendungsfällen in der Datenanalyse. Es kann ein wenig entmutigend sein, die Dokumentation zu erforschen, um herauszufinden, was der beste Weg ist, um eine bestimmte Aufgabe auszuführen.Unterschied (e) zwischen merge() und concat() in Pandas

Ich versuche derzeit, den wesentlichen Unterschied (en) zwischen pd.DataFrame.merge() und pd.concat() zu verstehen. So weit kann ich artikulieren:

.merge() kann nur Spalten (plus Zeilen Indizes) verwenden und es ist semantisch für Datenbank-Stil Operationen geeignet. .concat() kann mit beiden Achsen verwendet werden, wobei nur Indizes verwendet werden, und bietet die Option zum Hinzufügen eines hierarchischen Index.

Übrigens ermöglicht dies die folgende Redundanz: beide können zwei Datenrahmen mit den Zeilenindizes kombinieren.

Und wie für pd.DataFrame.join(), es scheint, es bietet nur eine Kurzschrift für eine Teilmenge der Anwendungsfälle von .merge().

Könnte jemand bitte kommentieren, wie vollständig und genau mein Verständnis zu diesem Zeitpunkt ist?

Vielen Dank.

+0

Auch bezogen werden: http://stackoverflow.com/a/37891437/1972495 eine Diskussion um '' '' .merge() '' '' und '' '' .join() '' ''. – WindChimes

Antwort

13

ein sehr hohe Unterschied ist, dass merge() verwendet wird, um zwei (oder mehr) Datenrahmen auf der Grundlage von Werten von gemeinsamen Spalten (Indizes können auch left_index=True und/oder right_index=True verwendet verwendet werden), und concat() wird verwendet, um hängt einen (oder mehrere) Datenrahmen untereinander an (oder seitwärts, je nachdem, ob die axis Option auf 0 oder 1 gesetzt ist).

join() wird verwendet, um 2 Datenrahmen auf der Grundlage des Index zusammenzuführen; anstelle von merge() mit der Option left_index=True können wir join() verwenden.

Zum Beispiel:

df1 = pd.DataFrame({'Key': ['b', 'b', 'a', 'c', 'a', 'a', 'b'], 'data1': range(7)}) 

df1: 
    Key data1 
0 b 0 
1 b 1 
2 a 2 
3 c 3 
4 a 4 
5 a 5 
6 b 6 

df2 = pd.DataFrame({'Key': ['a', 'b', 'd'], 'data2': range(3)}) 

df2: 
    Key data2 
0 a 0 
1 b 1 
2 d 2 

#Merge 
#The 2 dataframes are merged on the basis on values in column "Key" as it is a common column in 2 dataframes 

pd.merge(df1, df2) 

    Key data data2 
0 b 0 1 
1 b 1 1 
2 b 6 1 
3 a 2 0 
4 a 4 0 
5 a 5 0 

#Concat 
# df2 dataframe is appended at the bottom of df1 

pd.concat([df1, df2]) 

Key data1 data2 
0 b 0 NaN 
1 b 1 NaN 
2 a 2 NaN 
3 c 3 NaN 
4 a 4 NaN 
5 a 5 NaN 
6 b 6 NaN 
0 a Nan 0 
1 b Nan 1 
2 d Nan 2 
Verwandte Themen