Data Wrangling

Maîtriser Pandas : Cinq méthodes efficaces pour combiner des colonnes de texte

Spread the love

Combiner efficacement des colonnes de texte est une tâche cruciale dans la manipulation de données. Cet article présente cinq méthodes Pandas efficaces pour concaténer des colonnes de chaînes de caractères au sein d’un DataFrame, en soulignant leurs forces et leurs faiblesses pour vous guider dans le choix de l’approche optimale pour vos besoins spécifiques.

Table des matières :

La méthode de l’opérateur +

Cette approche simple utilise l’opérateur + intégré de Python pour la concaténation de chaînes de caractères. C’est généralement la plus rapide pour les scénarios simples, mais elle nécessite une gestion minutieuse des valeurs manquantes (NaN) pour éviter les exceptions TypeError.


import pandas as pd
import numpy as np

data = {'col1': ['A', 'B', 'C', np.nan], 'col2': ['D', 'E', 'F', 'G']}
df = pd.DataFrame(data)

df['combined'] = df['col1'].fillna('') + df['col2'].fillna('')
print(df)

Sortie :


  col1 col2 combined
0    A    D      AD
1    B    E      BE
2    C    F      CF
3  NaN    G       G

Méthode Series.str.cat()

Series.str.cat() est spécifiquement conçue pour la concaténation de chaînes de caractères et gère efficacement les données manquantes. Elle permet une personnalisation avec des séparateurs et une représentation NaN.


import pandas as pd
import numpy as np

data = {'col1': ['A', 'B', 'C', np.nan], 'col2': ['D', 'E', 'F', 'G']}
df = pd.DataFrame(data)

df['combined'] = df['col1'].str.cat(df['col2'], sep='-', na_rep='')
print(df)

Sortie :


  col1 col2 combined
0    A    D      A-D
1    B    E      B-E
2    C    F      C-F
3  NaN    G      -G

Méthode df.apply()

df.apply() offre de la flexibilité pour les opérations ligne par ligne (axis=1) ou colonne par colonne (axis=0), permettant une logique de concaténation complexe. Cependant, elle peut être moins efficace que l’opérateur + pour les grands DataFrames.


import pandas as pd
import numpy as np

data = {'col1': ['A', 'B', 'C', np.nan], 'col2': ['D', 'E', 'F', 'G']}
df = pd.DataFrame(data)

df['combined'] = df.apply(lambda row: str(row['col1']) + ' ' + str(row['col2']), axis=1)
print(df)

Sortie :


  col1 col2 combined
0    A    D      A D
1    B    E      B E
2    C    F      C F
3  NaN    G    nan G

Méthode Series.map()

Series.map() fournit un moyen flexible d’appliquer des fonctions personnalisées pour la concaténation, gérant des scénarios divers comme la logique conditionnelle ou des séparateurs spécifiques. Elle est particulièrement utile pour des règles de concaténation plus complexes.


import pandas as pd
import numpy as np

data = {'col1': ['A', 'B', 'C', np.nan], 'col2': ['D', 'E', 'F', 'G']}
df = pd.DataFrame(data)

def combine_strings(x):
  return str(x[0]) + '_' + str(x[1])

df['combined'] = df[['col1', 'col2']].apply(combine_strings, axis=1)
print(df)

Sortie :


  col1 col2 combined
0    A    D      A_D
1    B    E      B_E
2    C    F      C_F
3  NaN    G    nan_G

Méthode df.agg()

Bien que principalement utilisée pour les agrégations, df.agg() peut être adaptée pour la concaténation de chaînes de caractères. Cependant, elle est généralement moins efficace que les autres méthodes pour cet usage spécifique.


import pandas as pd
import numpy as np

data = {'col1': ['A', 'B', 'C', np.nan], 'col2': ['D', 'E', 'F', 'G']}
df = pd.DataFrame(data)

df['combined'] = df.agg(lambda x: str(x['col1']) + ' ' + str(x['col2']), axis=1)
print(df)

Sortie (similaire à df.apply()) :


  col1 col2 combined
0    A    D      A D
1    B    E      B E
2    C    F      C F
3  NaN    G    nan G

Conclusion : La méthode optimale dépend de vos besoins spécifiques et de la taille de votre jeu de données. Pour une concaténation basique, l’opérateur + offre de la vitesse. Series.str.cat() excelle dans la gestion efficace des valeurs manquantes. Series.map() et df.apply() offrent une plus grande flexibilité pour les scénarios complexes, tandis que df.agg() est moins efficace pour cette tâche.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *