HOWTO · Pandas

Comment combiner deux colonnes de texte dans un DataFrame dans Pandas

combiner des colonnes dans un DataFrame à l'aide de l'opérateur '+', des méthodes apply(), map(), str.cat() et agg() dans la bibliothèque pandas

Sur cette page

Combiner deux colonnes de texte dans un DataFrame Pandas est simple : additionnez les deux Series avec un espace entre elles, puis affectez le résultat à une nouvelle colonne.
Cela permet de garder chaque paire prénom-nom alignée avec sa ligne d’origine.

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

L’exemple produit la colonne Full Name présentée ci-dessous. Les cinq méthodes utilisent la même entrée et produisent les mêmes valeurs. Choisissez + ou Series.str.cat() pour la concaténation directe de chaînes ; utilisez les méthodes par ligne lorsqu’une fonction de ligne rend la transformation plus facile à exprimer.

Méthode de l’opérateur +

Pour les colonnes de chaînes, + concatène les valeurs ligne par ligne. Le séparateur est une chaîne ordinaire, donc remplacez " " par ", " ou un autre délimiteur pour correspondre au format souhaité. L’opérateur prend également en charge l’addition numérique, de sorte que la seule correspondance des types de données n’en fait pas une opération de concaténation de texte : utilisez-le ici parce que First et Last contiennent des chaînes.

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)

Le DataFrame résultant est :

     First      Last Age       Full Name
0      Ali     Azmat  30       Ali Azmat
1  Sharukh      Khan  40    Sharukh Khan
2    Linus  Torvalds  70  Linus Torvalds

Méthode Series.map()

Series.map() applique un mappage à chaque valeur d’une Series. Il ne s’agit pas d’un appel à DataFrame.map(), et convertir ces noms, qui sont déjà des chaînes, avec str est inutile ; l’exemple conserve cette conversion pour montrer comment la Series mappée peut être combinée avec une autre colonne. Pour des valeurs mixtes, décidez explicitement comment les valeurs manquantes et les valeurs qui ne sont pas des chaînes doivent être représentées avant de les convertir.

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)

Le DataFrame résultant est :

     First      Last Age       Full Name
0      Ali     Azmat  30       Ali Azmat
1  Sharukh      Khan  40    Sharukh Khan
2    Linus  Torvalds  70  Linus Torvalds

Méthode df.apply()

apply peut appeler une fonction une fois pour chaque ligne lorsque vous passez axis=1. Ne sélectionner que First et Last permet de garder Age hors de la jointure. L’opération de chaînes join attend que chaque valeur sélectionnée soit une chaîne ; convertissez ou traitez les valeurs manquantes et celles qui ne sont pas des chaînes de manière délibérée avant de l’utiliser sur des données moins uniformes. Pour un séparateur simple entre deux colonnes de texte, + ou Series.str.cat() est généralement plus direct.

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)

Le DataFrame résultant est :

     First      Last Age       Full Name
0      Ali     Azmat  30       Ali Azmat
1  Sharukh      Khan  40    Sharukh Khan
2    Linus  Torvalds  70  Linus Torvalds

Méthode Series.str.cat()

Series.str.cat() est conçu pour concaténer des valeurs de chaînes et rend le séparateur explicite avec sep. Par défaut, une valeur manquante dans l’une ou l’autre Series rend le résultat de cette ligne manquant. Définissez na_rep lorsque vous voulez un remplacement pour les valeurs manquantes, et choisissez ce remplacement en fonction de la signification de vos données.

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)

Le DataFrame résultant est :

     First      Last Age       Full Name
0      Ali     Azmat  30       Ali Azmat
1  Sharukh      Khan  40    Sharukh Khan
2    Linus  Torvalds  70  Linus Torvalds

Méthode df.agg()

agg peut également appliquer une jointure par ligne lorsqu’on lui passe axis=1 et une fonction telle que " ".join. Comme l’exemple apply, il opère sur les deux colonnes sélectionnées et attend que leurs valeurs soient des chaînes. Utilisez-le lorsque l’agrégation fait déjà partie de votre traitement par ligne ; pour cette tâche simple, l’opérateur + ou Series.str.cat() exprime l’intention plus directement. Vérifiez la colonne Full Name résultante et quelques lignes lorsque vous adaptez le code à vos propres données.

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)

Le DataFrame résultant est :

     First      Last Age       Full Name
0      Ali     Azmat  30       Ali Azmat
1  Sharukh      Khan  40    Sharukh Khan
2    Linus  Torvalds  70  Linus Torvalds