Pandas est une puissante librairie Python pour la manipulation et l’analyse de données. Créer de nouvelles colonnes dans un DataFrame en fonction de conditions est une tâche courante. Cet article explore plusieurs méthodes efficaces pour y parvenir, en privilégiant à la fois la clarté et les performances. Nous aborderons les listes en compréhension, les méthodes NumPy, pandas.DataFrame.apply
et pandas.Series.map()
, en comparant leurs forces et leurs faiblesses.
Table des matières
- Listes en compréhension pour la création conditionnelle de colonnes
- Exploitation de NumPy pour une logique conditionnelle optimisée
- Utilisation de
pandas.DataFrame.apply()
pour une logique conditionnelle flexible - Mapping de valeurs efficace avec
pandas.Series.map()
- Comparaison des performances et recommandations
Listes en compréhension pour la création conditionnelle de colonnes
Les listes en compréhension offrent une syntaxe concise pour créer de nouvelles colonnes basées sur des conditions simples. Elles sont particulièrement efficaces pour les DataFrames plus petits. Cependant, leurs performances peuvent se dégrader avec des ensembles de données plus importants.
import pandas as pd
data = {'Sales': [100, 200, 150, 250, 300],
'Region': ['North', 'South', 'North', 'East', 'West']}
df = pd.DataFrame(data)
df['SalesCategory'] = ['High' if sales > 200 else 'Low' for sales in df['Sales']]
print(df)
Exploitation de NumPy pour une logique conditionnelle optimisée
NumPy offre des opérations vectorisées hautement optimisées, améliorant considérablement les performances, en particulier pour les DataFrames plus importants. np.where()
est particulièrement utile pour les affectations conditionnelles.
import numpy as np
df['SalesCategory_np'] = np.where(df['Sales'] > 200, 'High', 'Low')
print(df)
Utilisation de pandas.DataFrame.apply()
pour une logique conditionnelle flexible
La méthode apply()
offre de la flexibilité pour une logique conditionnelle plus complexe, appliquant des fonctions ligne par ligne (axis=1
) ou colonne par colonne (axis=0
). Cependant, elle peut être plus lente que NumPy pour les très grands DataFrames, surtout avec des fonctions gourmandes en calcul.
def categorize_sales(row):
if row['Region'] == 'North' and row['Sales'] > 150:
return 'High North'
elif row['Sales'] > 200:
return 'High'
else:
return 'Low'
df['SalesCategory_apply'] = df.apply(categorize_sales, axis=1)
print(df)
Mapping de valeurs efficace avec pandas.Series.map()
La méthode map()
est idéale pour appliquer des mappings d’un ensemble de valeurs à un autre, créant efficacement des colonnes catégorielles.
region_mapping = {'North': 'Northern Region', 'South': 'Southern Region', 'East': 'Eastern Region', 'West': 'Western Region'}
df['RegionMapped'] = df['Region'].map(region_mapping)
print(df)
Comparaison des performances et recommandations
La méthode optimale dépend de facteurs tels que la complexité des conditions, la taille du DataFrame et les exigences de performance. Pour les conditions simples et les ensembles de données plus petits, les listes en compréhension sont concises. Les opérations vectorisées de NumPy offrent des avantages de performance significatifs pour les ensembles de données plus importants et une logique plus complexe. apply()
offre de la flexibilité pour les opérations complexes ligne par ligne ou colonne par colonne, tandis que map()
excelle dans les mappings de valeurs. Il est recommandé de réaliser des tests de performance sur vos données spécifiques afin de déterminer l’approche la plus efficace.