Der Hauptunterschied zwischen Merge & Concat besteht darin, dass Sie durch Merge eine strukturiertere "Verknüpfung" von Tabellen durchführen können, bei denen die Verwendung von Concat breiter und weniger strukturiert ist.
Verschmelzen
Wenn Sie auf die Dokumentation verweisen , pd.DataFrame.merge
wird rechts als erforderliches Argument verwendet, das Sie als Verknüpfung der linken und rechten Tabelle gemäß einer vordefinierten strukturierten Verknüpfungsoperation betrachten können. Beachten Sie die Definition für Parameter rechts .
Erforderliche Parameter
- rechts : DataFrame oder benannte Serie
Optionale Parameter
- wie : {'links', 'rechts', 'außen', 'inner'} Standard 'inner'
- on : Label oder Liste
- left_on : label oder list oder array-like
- right_on : label oder list oder array-like
- left_index : bool, Standardwert False
- right_index : bool, Standardwert False
- sort : bool, default False
- Suffixe : Tupel von (str, str), Standard ('_x', '_y')
- copy : bool, default True
- Indikator : bool oder str, Standard False
- validieren : str, optional
Wichtig: pd.DataFrame.merge
Erfordert das Recht, ein pd.DataFrame
oder ein benanntes pd.Series
Objekt zu sein.
Ausgabe
Wenn wir außerdem die Dokumentzeichenfolge für Zusammenführungsvorgänge bei Pandas überprüfen, sehen Sie Folgendes:
Führen Sie eine Datenbank-Zusammenführungsoperation (SQL) zwischen zwei DataFrame- oder Series-Objekten durch, indem Sie entweder Spalten als Schlüssel oder deren Zeilenindizes verwenden
Concat
Beachten Sie in der Dokumentation von pd.concat
zunächst, dass der Parameter nicht als Tabelle, Datenrahmen, Serie, Matrix usw. bezeichnet wird, sondern als objs . Das heißt, Sie können viele "Datencontainer" übergeben, die wie folgt definiert sind:
Iterable[FrameOrSeriesUnion], Mapping[Optional[Hashable], FrameOrSeriesUnion]
Erforderliche Parameter
- objs : eine Sequenz oder Zuordnung von Serien- oder DataFrame-Objekten
Optionale Parameter
- Achse : {0 / 'Index', 1 / 'Spalten'}, Standard 0
- join : {'inner', 'äußere'}, Standard 'äußere'
- ignore_index : bool, Standardwert False
- Tasten : Sequenz, Standard Keine
- Ebenen : Liste der Sequenzen, Standard Keine
- Namen : Liste, Standard Keine
- verify_integrity : bool, Standardwert False
- sort : bool, default False
- copy : bool, default True
Ausgabe
- Returns : Objekt, Art der objs
Beispiel
Code
import pandas as pd
v1 = pd.Series([1, 5, 9, 13])
v2 = pd.Series([10, 100, 1000, 10000])
v3 = pd.Series([0, 1, 2, 3])
df_left = pd.DataFrame({
"v1": v1,
"v2": v2,
"v3": v3
})
df_right = pd.DataFrame({
"v4": [5, 5, 5, 5],
"v5": [3, 2, 1, 0]
})
df_concat = pd.concat([v1, v2, v3])
merge_result = df_left.merge(df_right, left_index=True, right_index=True)
concat_result = pd.concat([df_left, df_right], sort=False)
print(merge_result)
print('='*20)
print(concat_result)
Code-Ausgabe
v1 v2 v3 v4 v5
0 1 10 0 5 3
1 5 100 1 5 2
2 9 1000 2 5 1
3 13 10000 3 5 0
====================
v1 v2 v3 v4 v5
0 1.0 10.0 0.0 NaN NaN
1 5.0 100.0 1.0 NaN NaN
2 9.0 1000.0 2.0 NaN NaN
3 13.0 10000.0 3.0 NaN NaN
0 NaN NaN NaN 5.0 3.0
1 NaN NaN NaN 5.0 2.0
2 NaN NaN NaN 5.0 1.0
Sie können jedoch die ersten Ausgang (merge) mit concat durch Ändern des erreichen Achse Parameter
concat_result = pd.concat([df_left, df_right], sort=False, axis=1)
Beachten Sie das folgende Verhalten:
concat_result = pd.concat([df_left, df_right, df_left, df_right], sort=False)
Ausgänge;
v1 v2 v3 v4 v5
0 1.0 10.0 0.0 NaN NaN
1 5.0 100.0 1.0 NaN NaN
2 9.0 1000.0 2.0 NaN NaN
3 13.0 10000.0 3.0 NaN NaN
0 NaN NaN NaN 5.0 3.0
1 NaN NaN NaN 5.0 2.0
2 NaN NaN NaN 5.0 1.0
3 NaN NaN NaN 5.0 0.0
0 1.0 10.0 0.0 NaN NaN
1 5.0 100.0 1.0 NaN NaN
2 9.0 1000.0 2.0 NaN NaN
3 13.0 10000.0 3.0 NaN NaN
0 NaN NaN NaN 5.0 3.0
1 NaN NaN NaN 5.0 2.0
2 NaN NaN NaN 5.0 1.0
3 NaN NaN NaN 5.0 0.0
Dies können Sie beim Zusammenführen nicht mit einem ähnlichen Vorgang ausführen, da nur ein einzelner DataFrame oder eine benannte Serie zulässig ist.
merge_result = df_left.merge([df_right, df_left, df_right], left_index=True, right_index=True)
Ausgänge;
TypeError: Can only merge Series or DataFrame objects, a <class 'list'> was passed
Fazit
Wie Sie vielleicht bereits bemerkt haben, können sich die Ein- und Ausgänge zwischen "Zusammenführen" und "Concat" unterscheiden.
Wie eingangs erwähnt, besteht der allererste (Haupt-) Unterschied darin, dass "Zusammenführen" eine strukturiertere Verknüpfung mit einer Reihe eingeschränkter Objekte und Parameter ausführt, während "concat" eine weniger strenge / breitere Verknüpfung mit einer breiteren Gruppe ausführt von Objekten und Parametern.
Alles in allem ist das Zusammenführen weniger tolerant gegenüber Änderungen / (der Eingabe) und "concat" ist lockerer / weniger empfindlich gegenüber Änderungen / (der Eingabe). Sie können "Zusammenführen" erreichen, indem Sie "concat" verwenden, aber das Gegenteil ist nicht immer der Fall.
Bei der Operation "Zusammenführen" werden Datenrahmenspalten (oder der Name des pd.Series
Objekts) oder Zeilenindizes verwendet. Da nur diese Entitäten verwendet werden, wird die horizontale Zusammenführung von Datenrahmen oder Serien durchgeführt, und es wird keine vertikale Operation angewendet.
Wenn Sie mehr sehen möchten, können Sie ein wenig in den Quellcode eintauchen.
.merge()
und.join()
.