HOWTO · Pandas
Wie man zwei Textspalten in einem DataFrame in Pandas kombiniert
Spalten in einem DataFrame mit dem '+'-Operator sowie den Methoden apply(), map(), str.cat() und agg() in der Pandas-Bibliothek kombinieren
Auf dieser Seite
Zwei Textspalten in einem Pandas-DataFrame zu kombinieren ist unkompliziert: Addieren Sie die beiden Series mit einem Leerzeichen dazwischen und weisen Sie das Ergebnis einer neuen Spalte zu.
Dadurch bleibt jedes Paar aus Vor- und Nachname mit seiner ursprünglichen Zeile ausgerichtet.
import pandas as pd
data = [["Ali", "Azmat", "30"], ["Sharukh", "Khan", "40"], ["Linus", "Torvalds", "70"]]
df = pd.DataFrame(data, columns=["First", "Last", "Age"])
df["Full Name"] = df["First"] + " " + df["Last"]
print(df)
First Last Age Full Name
0 Ali Azmat 30 Ali Azmat
1 Sharukh Khan 40 Sharukh Khan
2 Linus Torvalds 70 Linus Torvalds
Das Beispiel erzeugt die unten gezeigte Spalte Full Name. Die fünf Methoden verwenden dieselbe Eingabe und erzeugen dieselben Werte. Wählen Sie + oder Series.str.cat() für die direkte Verkettung von Zeichenfolgen; verwenden Sie die zeilenweisen Methoden, wenn eine Zeilenfunktion die Umwandlung leichter ausdrücken lässt.
Methode mit dem +-Operator
Für Spalten mit Zeichenfolgen verkettet + die Werte Zeile für Zeile. Das Trennzeichen ist eine gewöhnliche Zeichenfolge, ändern Sie also " " in ", " oder ein anderes Trennzeichen, um das gewünschte Format zu erhalten. Der Operator unterstützt auch die numerische Addition, sodass übereinstimmende Datentypen allein daraus noch keine Textverkettung machen: Verwenden Sie ihn hier, weil First und Last Zeichenfolgen enthalten.
import pandas as pd
data = [["Ali", "Azmat", "30"], ["Sharukh", "Khan", "40"], ["Linus", "Torvalds", "70"]]
df = pd.DataFrame(data, columns=["First", "Last", "Age"])
df["Full Name"] = df["First"] + " " + df["Last"]
print(df)
Der resultierende DataFrame sieht so aus:
First Last Age Full Name
0 Ali Azmat 30 Ali Azmat
1 Sharukh Khan 40 Sharukh Khan
2 Linus Torvalds 70 Linus Torvalds
Methode mit Series.map()
Series.map() wendet eine Abbildung auf jeden Wert in einer Series an. Es handelt sich nicht um einen Aufruf von DataFrame.map(), und die Umwandlung dieser bereits als Zeichenfolgen vorliegenden Namen mit str ist unnötig; das Beispiel behält diese Umwandlung bei, um zu zeigen, wie die abgebildete Series mit einer anderen Spalte kombiniert werden kann. Entscheiden Sie bei gemischten Werten ausdrücklich, wie fehlende Werte und Nicht-Zeichenfolgenwerte dargestellt werden sollen, bevor Sie sie umwandeln.
import pandas as pd
data = [["Ali", "Azmat", "30"], ["Sharukh", "Khan", "40"], ["Linus", "Torvalds", "70"]]
df = pd.DataFrame(data, columns=["First", "Last", "Age"])
df["Full Name"] = df["First"].map(str) + " " + df["Last"]
print(df)
Der resultierende DataFrame sieht so aus:
First Last Age Full Name
0 Ali Azmat 30 Ali Azmat
1 Sharukh Khan 40 Sharukh Khan
2 Linus Torvalds 70 Linus Torvalds
Methode mit df.apply()
Mit apply können Sie eine Funktion einmal für jede Zeile aufrufen, wenn Sie axis=1 übergeben. Wenn Sie nur First und Last auswählen, bleibt Age aus der Verknüpfung heraus. Die Zeichenfolgenoperation join erwartet, dass jeder ausgewählte Wert eine Zeichenfolge ist; wandeln Sie fehlende Werte und Nicht-Zeichenfolgenwerte bewusst um oder behandeln Sie sie, bevor Sie sie auf weniger einheitliche Daten anwenden. Für ein einfaches Trennzeichen zwischen zwei Textspalten ist + oder Series.str.cat() in der Regel direkter.
import pandas as pd
data = [["Ali", "Azmat", "30"], ["Sharukh", "Khan", "40"], ["Linus", "Torvalds", "70"]]
df = pd.DataFrame(data, columns=["First", "Last", "Age"])
df["Full Name"] = df[["First", "Last"]].apply(" ".join, axis=1)
print(df)
Der resultierende DataFrame sieht so aus:
First Last Age Full Name
0 Ali Azmat 30 Ali Azmat
1 Sharukh Khan 40 Sharukh Khan
2 Linus Torvalds 70 Linus Torvalds
Methode mit Series.str.cat()
Series.str.cat() ist für die Verkettung von Zeichenfolgenwerten konzipiert und macht das Trennzeichen mit sep ausdrücklich. Standardmäßig führt ein fehlender Wert in einer der beiden Series dazu, dass das Ergebnis dieser Zeile fehlt. Setzen Sie na_rep, wenn Sie einen Ersatz für fehlende Werte wünschen, und wählen Sie diesen Ersatz so, dass er zur Bedeutung Ihrer Daten passt.
import pandas as pd
data = [["Ali", "Azmat", "30"], ["Sharukh", "Khan", "40"], ["Linus", "Torvalds", "70"]]
df = pd.DataFrame(data, columns=["First", "Last", "Age"])
df["Full Name"] = df["First"].str.cat(df["Last"], sep=" ")
print(df)
Der resultierende DataFrame sieht so aus:
First Last Age Full Name
0 Ali Azmat 30 Ali Azmat
1 Sharukh Khan 40 Sharukh Khan
2 Linus Torvalds 70 Linus Torvalds
Methode mit df.agg()
Auch agg kann eine zeilenweise Verknüpfung anwenden, wenn axis=1 und eine Funktion wie " ".join übergeben werden. Wie das apply-Beispiel arbeitet es mit den beiden ausgewählten Spalten und erwartet, dass ihre Werte Zeichenfolgen sind. Verwenden Sie es, wenn eine Aggregation bereits Teil Ihrer zeilenweisen Verarbeitung ist; für diese einfache Aufgabe vermitteln der +-Operator oder Series.str.cat() die Absicht direkter. Überprüfen Sie die resultierende Spalte Full Name und einige Zeilen, wenn Sie den Code an Ihre eigenen Daten anpassen.
import pandas as pd
data = [["Ali", "Azmat", "30"], ["Sharukh", "Khan", "40"], ["Linus", "Torvalds", "70"]]
df = pd.DataFrame(data, columns=["First", "Last", "Age"])
df["Full Name"] = df[["First", "Last"]].agg(" ".join, axis=1)
print(df)
Der resultierende DataFrame sieht so aus:
First Last Age Full Name
0 Ali Azmat 30 Ali Azmat
1 Sharukh Khan 40 Sharukh Khan
2 Linus Torvalds 70 Linus Torvalds