Exercice 36 / 100

Pandas - nettoyage

ConsigneRemplacez les NaN par la moyenne de la colonne

📖 Cours

Les valeurs manquantes sont représentées par NaN (Not a Number). Pandas a des outils dédiés pour les détecter et les traiter.

Détecter les NaN

df.isnull() # DataFrame de booléens (True = NaN)df.isnull().sum() # nb de NaN par colonnedf.isnull().any() # True si au moins un NaN par colonnedf['col'].notnull() # inverse

Supprimer les lignes/colonnes avec NaN

df.dropna() # supprime toute ligne contenant ≥ 1 NaNdf.dropna(subset=['note']) # uniquement si NaN dans 'note'df.dropna(how='all') # seulement si TOUTE la ligne est NaNdf.dropna(axis=1) # supprime les colonnes avec NaN

Remplir les NaN (imputation)

df.fillna(0) # remplacer par 0df.fillna('Inconnu') # par une strdf.fillna(df.mean()) # par la moyenne de chaque colonnedf['note'] = df['note'].fillna(df['note'].mean()) # cible une colonnedf.fillna(method='ffill') # forward fill (propage la précédente)df.fillna(method='bfill') # backward fill

Exemple complet

import pandas as pdimport numpy as np
df = pd.DataFrame({'note': [14, np.nan, 17, np.nan, 11]})moyenne = df['note'].mean() # 14.0 (NaN ignorés)df['note'] = df['note'].fillna(moyenne)print(df)# note# 0 14.0# 1 14.0# 2 17.0# 3 14.0# 4 11.0

Par défaut, fillna et autres NE modifient pas le DataFrame. Il faut réassigner (df = df.fillna(...) ou df.fillna(..., inplace=True)).

Face à une valeur manquante, deux voies : supprimer la ligne avec dropna, ou la remplir avec fillna, par exemple par la moyenne de la colonne
Face à une valeur manquante, deux voies : supprimer la ligne avec dropna, ou la remplir avec fillna, par exemple par la moyenne de la colonne

Stratégies d'imputation courantes :

- moyenne / médiane (numérique) — la médiane est plus robuste aux outliers

- mode (catégoriel)

- constante ('Inconnu', 0)

- imputation par groupe : df.groupby('cat').transform('mean')

Envie d'aller plus loin ? Découvrez nos formations certifiées Bac+2 à Bac+5 →