Exercice 65 / 100

Pandas — Nettoyage

ConsigneCrée un DataFrame avec des valeurs manquantes (NaN) et des doublons. Utilise dropna(), fillna() et drop_duplicates() pour nettoyer

📖 Cours

Nettoyer un DataFrame = supprimer les doublons, traiter les NaN, harmoniser les types. C'est l'étape avant toute analyse.

Supprimer les doublons

df.drop_duplicates() supprime les lignes 100% identiquesdf.drop_duplicates(subset=['nom']) identiques SUR la colonne nomdf.drop_duplicates(keep='last') garde la dernière occurrence

Détecter sans supprimer :

df.duplicated() Series booléenne (True si doublon)df.duplicated().sum() nombre de doublons
drop_duplicates compare les lignes entières : deux lignes ne se rassemblent que si TOUTES leurs colonnes sont identiques, et une seule ressort alors du groupe, la première rencontrée sauf à demander keep='last' ; les deux lignes de Bob diffèrent par le score, elles restent donc toutes les deux
drop_duplicates compare les lignes entières : deux lignes ne se rassemblent que si TOUTES leurs colonnes sont identiques, et une seule ressort alors du groupe, la première rencontrée sauf à demander keep='last' ; les deux lignes de Bob diffèrent par le score, elles restent donc toutes les deux

Traiter les NaN

Supprimer

df.dropna() supprime toute ligne avec ≥ 1 NaNdf.dropna(subset=['score']) seulement si NaN dans 'score'

Remplir

df['score'] = df['score'].fillna(0)df['score'] = df['score'].fillna(df['score'].mean())df['ville'] = df['ville'].fillna('Inconnu')df.ffill() propage la précédente non-NaN (l'ancienne écriture df.fillna(method='ffill') est dépréciée depuis pandas 2.1)

Exemple complet

df = pd.DataFrame({ 'nom': ['Alice', 'Bob', 'Alice', 'Charlie', 'Bob'], 'score': [85, np.nan, 85, 90, 78], 'ville': ['Paris', 'Lyon', 'Paris', None, 'Lyon']})
print('Avant:', len(df)) # 5print('NaN:', df.isnull().sum().sum()) # 2
df_clean = df.drop_duplicates().copy() # 4 lignes (le .copy() de l'encadré plus bas)df_clean['score'] = df_clean['score'].fillna(df_clean['score'].mean())df_clean['ville'] = df_clean['ville'].fillna('Inconnu')print(df_clean)

⚠ Le piège SettingWithCopyWarning

Quand tu fais df_clean = df[...] puis df_clean['col'] = ..., pandas peut afficher un avertissement disant que tu modifies une vue. Pour éviter :

df_clean = df[...].copy() # copie explicite

Pour des projets ML, fixe une stratégie d'imputation par colonne (mean / median / mode / 'Inconnu') et documente-la. Le choix d'imputation peut changer les performances du modèle.

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