Exercice 36 / 100

Pandas - nettoyage

Remplacez les NaN par la moyenne de la colonne

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 colonne df.isnull().any() # True si au moins un NaN par colonne df['col'].notnull() # inverse

Supprimer les lignes/colonnes avec NaN

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

Remplir les NaN (imputation)

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

Exemple complet

import pandas as pd import 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

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')

exercise.py

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