Data Analysis

Création efficace de colonnes DataFrame basées sur des conditions dans Pandas

Spread the love

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

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.

Laisser un commentaire

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