Pandas-Datenkonkatenation (concat / append)
Datenkonkatenation verbindet mehrere DataFrames oder Series zeilen- oder spaltenweise zusammen.pd.concatist die Hauptkonkatenationsfunktion,appendist die vereinfachte Version (veraltet, concat wird stattdessen empfohlen)
Grundlegende Verwendung von concat
pd.concat()Kann mehrere DataFrames / Series entlang einer Achse konkatenieren.
Zeilenweise Konkatenation (vertikales Stapeln)
Beispiel
import pandas as pd
# Zwei DataFrames erstellen
df1 = pd.DataFrame({
"Name": ["Zhang San", "Li Si"],
"Alter": [25, 30]
})
df2 = pd.DataFrame({
"Name": ["Wang Wu", "Zhao Liu"],
"Alter": [28, 35]
})
print("DataFrame 1:")
print(df1)
print()
print("DataFrame 2:")
print(df2)
print()
# Vertikal verketten
result = pd.concat([df1, df2], ignore_index=True)
print("Verkettungsergebnis:")
print(result)
# Zwei DataFrames erstellen
df1 = pd.DataFrame({
"Name": ["Zhang San", "Li Si"],
"Alter": [25, 30]
})
df2 = pd.DataFrame({
"Name": ["Wang Wu", "Zhao Liu"],
"Alter": [28, 35]
})
print("DataFrame 1:")
print(df1)
print()
print("DataFrame 2:")
print(df2)
print()
# Vertikal verketten
result = pd.concat([df1, df2], ignore_index=True)
print("Verkettungsergebnis:")
print(result)
Spaltenweise Verkettung (horizontales Stapeln)
Beispiel
import pandas as pd
df1 = pd.DataFrame({
"Name": ["Zhang San", "Li Si", "Wang Wu"]
})
df2 = pd.DataFrame({
"Alter": [25, 30, 28],
"City": ["Beijing", "Shanghai", "Guangzhou"]
})
# Horizontal verketten
result = pd.concat([df1, df2], axis=1)
print("Horizontale Verkettung:")
print(result)
df1 = pd.DataFrame({
"Name": ["Zhang San", "Li Si", "Wang Wu"]
})
df2 = pd.DataFrame({
"Alter": [25, 30, 28],
"City": ["Beijing", "Shanghai", "Guangzhou"]
})
# Horizontal verketten
result = pd.concat([df1, df2], axis=1)
print("Horizontale Verkettung:")
print(result)
axis=0Gibt zeilenweise Verkettung an (Hinzufügen von Zeilen),axis=1Gibt spaltenweise Verkettung an (Hinzufügen von Spalten).
Umgang mit doppelten Indizes
ignore_index
Beispiel
import pandas as pd
df1 = pd.DataFrame({
"Name": ["Zhang San", "Li Si"],
"Alter": [25, 30]
}, index=[0, 1])
df2 = pd.DataFrame({
"Name": ["Wang Wu", "Zhao Liu"],
"Alter": [28, 35]
}, index=[0, 1])
# Ursprüngliche Indizes standardmäßig beibehalten
print("Ursprüngliche Indizes beibehalten:")
print(pd.concat([df1, df2]))
print()
# Alte Indizes ignorieren und sie neu erzeugen
print("Ursprüngliche Indizes ignorieren:")
print(pd.concat([df1, df2], ignore_index=True))
df1 = pd.DataFrame({
"Name": ["Zhang San", "Li Si"],
"Alter": [25, 30]
}, index=[0, 1])
df2 = pd.DataFrame({
"Name": ["Wang Wu", "Zhao Liu"],
"Alter": [28, 35]
}, index=[0, 1])
# Ursprüngliche Indizes standardmäßig beibehalten
print("Ursprüngliche Indizes beibehalten:")
print(pd.concat([df1, df2]))
print()
# Alte Indizes ignorieren und sie neu erzeugen
print("Ursprüngliche Indizes ignorieren:")
print(pd.concat([df1, df2], ignore_index=True))
Doppelte Schlüssel überprüfen
Beispiel
import pandas as pd
df1 = pd.DataFrame({
"A": [1, 2]
})
df2 = pd.DataFrame({
"A": [3, 4]
})
# Prüfen, ob doppelte Schlüssel vorhanden sind
print("Verifizierungsobjekt:")
print(pd.concat([df1, df2], verify_integrity=True))
df1 = pd.DataFrame({
"A": [1, 2]
})
df2 = pd.DataFrame({
"A": [3, 4]
})
# Prüfen, ob doppelte Schlüssel vorhanden sind
print("Verifizierungsobjekt:")
print(pd.concat([df1, df2], verify_integrity=True))
Umgang mit Spaltenabweichungen
Der join-Parameter
Beispiel
import pandas as pd
df1 = pd.DataFrame({
"A": [1, 2, 3],
"B": ["a", "b", "c"]
})
df2 = pd.DataFrame({
"B": ["x", "y", "z"],
"C": [10, 20, 30]
})
print("df1:")
print(df1)
print()
print("df2:")
print(df2)
print()
# Outer Join (Standard): alle Spalten beibehalten
print("Outer Join (alle Spalten beibehalten):")
print(pd.concat([df1, df2], join="outer"))
print()
# Inner Join: nur gemeinsame Spalten behalten
print("Inner Join (nur gemeinsame Spalten behalten):")
print(pd.concat([df1, df2], join="inner"))
df1 = pd.DataFrame({
"A": [1, 2, 3],
"B": ["a", "b", "c"]
})
df2 = pd.DataFrame({
"B": ["x", "y", "z"],
"C": [10, 20, 30]
})
print("df1:")
print(df1)
print()
print("df2:")
print(df2)
print()
# Outer Join (Standard): alle Spalten beibehalten
print("Outer Join (alle Spalten beibehalten):")
print(pd.concat([df1, df2], join="outer"))
print()
# Inner Join: nur gemeinsame Spalten behalten
print("Inner Join (nur gemeinsame Spalten behalten):")
print(pd.concat([df1, df2], join="inner"))
Nur neue Spalten hinzufügen
Beispiel
import pandas as pd
df1 = pd.DataFrame({
"Name": ["Zhang San", "Li Si"],
"Alter": [25, 30]
})
df2 = pd.DataFrame({
"Stadt": ["Beijing", "Shanghai"]
})
# Die Spalten von df2 zu df1 hinzufügen
result = pd.concat([df1, df2], axis=1)
print("Nur neue Spalten hinzufügen:")
print(result)
df1 = pd.DataFrame({
"Name": ["Zhang San", "Li Si"],
"Alter": [25, 30]
})
df2 = pd.DataFrame({
"Stadt": ["Beijing", "Shanghai"]
})
# Die Spalten von df2 zu df1 hinzufügen
result = pd.concat([df1, df2], axis=1)
print("Nur neue Spalten hinzufügen:")
print(result)
Der keys-Parameter zum Erstellen eines hierarchischen Index
Beispiel
import pandas as pd
df1 = pd.DataFrame({"A": [1, 2], "B": [3, 4]})
df2 = pd.DataFrame({"A": [5, 6], "B": [7, 8]})
df3 = pd.DataFrame({"A": [9, 10], "B": [11, 12]})
# Verwende den keys-Parameter, um einen hierarchischen Index zu erstellen
result = pd.concat([df1, df2, df3], keys=["Erstes Jahr", "Zweites Jahr", "Drittes Jahr"])
print("Verkettung mit hierarchischem Index:")
print(result)
print()
# Daten aus dem hierarchischen Index abrufen
print("Daten des zweiten Jahres abrufen:")
print(result.loc["Zweites Jahr"])
df1 = pd.DataFrame({"A": [1, 2], "B": [3, 4]})
df2 = pd.DataFrame({"A": [5, 6], "B": [7, 8]})
df3 = pd.DataFrame({"A": [9, 10], "B": [11, 12]})
# Verwende den keys-Parameter, um einen hierarchischen Index zu erstellen
result = pd.concat([df1, df2, df3], keys=["Erstes Jahr", "Zweites Jahr", "Drittes Jahr"])
print("Verkettung mit hierarchischem Index:")
print(result)
print()
# Daten aus dem hierarchischen Index abrufen
print("Daten des zweiten Jahres abrufen:")
print(result.loc["Zweites Jahr"])
Praxis: Kombinieren mehrerer Monate von Daten
Beispiel
import pandas as pd
# Verkaufsdaten für mehrere Monate simulieren
jan_sales = pd.DataFrame({
"Monat": ["2024-01"] * 3,
"Produkt": ["A", "B", "C"],
"Verkäufe": [100, 150, 80]
})
feb_sales = pd.DataFrame({
"Monat": ["2024-02"] * 3,
"Produkt": ["A", "B", "C"],
"Verkäufe": [120, 140, 90]
})
mar_sales = pd.DataFrame({
"Monat": ["2024-03"] * 3,
"Produkt": ["A", "B", "C"],
"Verkäufe": [110, 160, 85]
})
# Daten des ersten Quartals kombinieren
quarterly = pd.concat([jan_sales, feb_sales, mar_sales], ignore_index=True)
print("Zusammenfassung des ersten Quartals:")
print(quarterly)
print()
# Nach Monat aggregieren
monthly_summary = quarterly.groupby("Month")["Sales"].sum()
print("Monatliche Verkaufszusammenfassung:")
print(monthly_summary)
# Verkaufsdaten für mehrere Monate simulieren
jan_sales = pd.DataFrame({
"Monat": ["2024-01"] * 3,
"Produkt": ["A", "B", "C"],
"Verkäufe": [100, 150, 80]
})
feb_sales = pd.DataFrame({
"Monat": ["2024-02"] * 3,
"Produkt": ["A", "B", "C"],
"Verkäufe": [120, 140, 90]
})
mar_sales = pd.DataFrame({
"Monat": ["2024-03"] * 3,
"Produkt": ["A", "B", "C"],
"Verkäufe": [110, 160, 85]
})
# Daten des ersten Quartals kombinieren
quarterly = pd.concat([jan_sales, feb_sales, mar_sales], ignore_index=True)
print("Zusammenfassung des ersten Quartals:")
print(quarterly)
print()
# Nach Monat aggregieren
monthly_summary = quarterly.groupby("Month")["Sales"].sum()
print("Monatliche Verkaufszusammenfassung:")
print(monthly_summary)
Die append-Methode (veraltet)
DataFrame.append()In Pandas 2.0 veraltet und nicht empfohlen. Bitte verwenden Siepd.concat()stattdessen.
# 不推荐(已废弃) result = df1.append(df2) # 推荐 result = pd.concat([df1, df2])
Andere Erweiterungen
concatIst die Standardmethode zum Verketten von Daten in Pandas, mit besserer Leistung und umfangreicherer Funktionalität.