Pandas est une puissante bibliothèque Python pour la manipulation et l’analyse de données. Un besoin fréquent est d’appliquer la même fonction à plusieurs colonnes d’un DataFrame. Cet article décrit des méthodes efficaces pour y parvenir, en évitant le traitement répétitif colonne par colonne.
Table des matières
- Opérations vectorisées : l’approche la plus rapide
- La méthode
apply()
: Opérations par ligne applymap()
: Transformations élément par élément- Fonctions lambda pour plus de concision
- Gestion des différents types de données
- Choisir la bonne méthode
Opérations vectorisées : l’approche la plus rapide
Pour les opérations numériques, les fonctions vectorisées de Pandas offrent une vitesse supérieure. Elles opèrent directement sur des colonnes entières, en tirant parti du traitement de tableaux optimisé de NumPy. Ceci est significativement plus rapide que les méthodes itératives pour les grands ensembles de données.
import pandas as pd
data = {'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]}
df = pd.DataFrame(data)
# Addition des colonnes A et B élément par élément
df['Sum_AB'] = df['A'] + df['B']
print(df)
# Mise au carré des valeurs de la colonne A
df['A_Squared'] = df['A']**2
print(df)
La méthode apply()
: Opérations par ligne
La méthode apply()
est polyvalente pour appliquer des fonctions ligne par ligne (axis=1
) ou colonne par colonne (axis=0
). Ceci est idéal lorsque votre fonction nécessite l’accès à plusieurs colonnes au sein de chaque ligne.
# Fonction pour calculer le produit des colonnes A et B
def multiply_ab(row):
return row['A'] * row['B']
df['Product_AB'] = df.apply(multiply_ab, axis=1)
print(df)
applymap()
: Transformations élément par élément
applymap()
applique une fonction à chaque élément individuel d’un DataFrame (ou de colonnes sélectionnées). Elle est efficace pour les transformations simples, élément par élément.
# Appliquer une fonction personnalisée aux éléments des colonnes 'A' et 'C'
def custom_function(x):
if x > 5:
return x * 2
else:
return x
df[['A', 'C']] = df[['A', 'C']].applymap(custom_function)
print(df)
Fonctions lambda pour plus de concision
Les fonctions lambda offrent un moyen compact de définir des fonctions simples et anonymes en ligne, améliorant la lisibilité lorsqu’elles sont utilisées avec apply()
ou d’autres méthodes.
# Utilisation d'une fonction lambda avec apply pour plus de concision
df['Sum_AB_Lambda'] = df.apply(lambda row: row['A'] + row['B'], axis=1)
print(df)
Gestion des différents types de données
Lorsque vous travaillez avec plusieurs colonnes, anticipez les variations de types de données. Des fonctions robustes doivent inclure la gestion des erreurs (par exemple, les blocs try-except
) pour gérer les éventuels problèmes de correspondance de types et éviter les échecs inattendus.
Choisir la bonne méthode
L’approche optimale dépend de la complexité de votre fonction et de la taille de l’ensemble de données :
- Opérations vectorisées : Plus rapides pour les opérations numériques simples sur plusieurs colonnes.
applymap()
: Efficace pour les opérations élément par élément sur des cellules individuelles sur plusieurs colonnes.apply()
(avecaxis=1
ouaxis=0
) : Flexible pour les opérations ligne par ligne ou colonne par colonne nécessitant l’accès à plusieurs colonnes. Peut être plus lent pour les DataFrames massifs.- Fonctions lambda : Améliorent la lisibilité du code pour les fonctions simples au sein de
apply()
ou d’autres méthodes.
Privilégiez les opérations vectorisées chaque fois que possible pour des performances optimales. La compréhension de ces techniques permet une manipulation efficace des données dans Pandas.