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.
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() # inversedf.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 NaNdf.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 fillimport pandas as pd
import numpy as npdf = 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.0Par défaut, fillna et autres NE modifient pas le DataFrame. Il faut réassigner (df = df.fillna(...) ou df.fillna(..., inplace=True)).
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 →