webentwicklung-frage-antwort-db.com.de

Unterschied (e) zwischen merge () und concat () in pandas

Was sind die wesentlichen Unterschiede zwischen pd.DataFrame.merge() und pd.concat()?

Soweit ich dies festgestellt habe, kommentieren Sie bitte, wie vollständig und richtig mein Verständnis ist:

  • .merge() kann nur Spalten (plus Zeilenindizes) verwenden und ist semantisch für datenbankartige Operationen geeignet. .concat() kann mit beiden Achsen verwendet werden, wobei nur Indizes verwendet werden. Außerdem besteht die Möglichkeit, einen hierarchischen Index hinzuzufügen.

  • Dies ermöglicht im Übrigen die folgende Redundanz: Beide können zwei Datenrahmen unter Verwendung der Zeilenindizes kombinieren.

  • pd.DataFrame.join() bietet lediglich eine Kurzform für eine Teilmenge der Anwendungsfälle von .merge()

(Pandas eignet sich hervorragend für ein sehr breites Spektrum von Anwendungsfällen in der Datenanalyse. Es kann ein bisschen entmutigend sein, die Dokumentation zu untersuchen, um herauszufinden, wie eine bestimmte Aufgabe am besten ausgeführt werden kann.)

47
WindChimes

Ein sehr großer Unterschied besteht darin, dass merge() verwendet wird, um zwei (oder mehr) Datenrahmen auf der Grundlage von Werten gemeinsamer Spalten zu kombinieren (Indizes können auch verwendet werden, verwenden Sie left_index=True Und/oder right_index=True) Und concat() werden verwendet, um einen (oder mehrere) Datenrahmen untereinander (oder seitwärts) anzuhängen, je nachdem, ob die Option axis auf 0 oder 1 gesetzt ist ).

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

Beispielsweise:

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 of values in column "Key" as it is 
# a common column in 2 dataframes

pd.merge(df1, df2)

   Key data1 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
46
Abhishek Sawant

pd.concat Nimmt ein Iterable als Argument. Daher kann es DataFrames nicht direkt als Argument nehmen. Auch Dimensions von DataFrame sollten bei der Verkettung entlang der Achse übereinstimmen.

pd.merge Kann DataFrames als Argument verwenden und wird verwendet, um zwei DataFrames mit denselben Spalten oder demselben Index zu kombinieren, was mit pd.concat Seitdem nicht mehr möglich ist Es wird die wiederholte Spalte im DataFrame angezeigt.

Mit join können zwei DataFrame mit unterschiedlichen Indizes verbunden werden.

Ich versuche gerade, die wesentlichen Unterschiede zwischen pd.DataFrame.merge() und pd.concat() zu verstehen.

Gute Frage. Der Hauptunterschied:

pd.concat funktioniert auf beiden Achsen.

Der andere Unterschied ist, dass pd.concat innerdefault und Outer verbindet sich nur, während pd.DataFrame.merge() = hat links, rechts, außen , innerdefault schließt sich an.

Der dritte bemerkenswerte andere Unterschied ist: pd.DataFrame.merge() hat die Option, die Spaltensuffixe festzulegen, wenn Spalten mit demselben Namen zusammengeführt werden, während dies für pd.concat Nicht möglich ist.


Mit pd.concat Können Sie standardmäßig Zeilen mit mehreren Datenrahmen stapeln (axis=0). Wenn Sie axis=1 Einstellen, ahmen Sie die Funktion pd.DataFrame.merge() nach.

Einige nützliche Beispiele für pd.concat:

df2=pd.concat([df]*2, ignore_index=True) #double the rows of a dataframe

df2=pd.concat([df, df.iloc[[0]]]) # add first row to the end

df3=pd.concat([df1,df2], join='inner', ignore_index=True) # concat two df's
1
prosti