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