Premier projet : pipeline de nettoyage de données. Objectif : transformer un DataFrame brut (NaN, doublons, types incohérents) en dataset prêt pour l'analyse.
1. EXPLORATION
df.shape, df.info(), df.head(), df.describe()
df.isnull().sum(), df.duplicated().sum()2. SUPPRESSION DES DOUBLONS
df = df.drop_duplicates()3. TRAITEMENT DES NAN
- supprimer : df.dropna(subset=['col_critique'])
- remplir : df['col'] = df['col'].fillna(strategie)4. HARMONISATION DES TYPES
df['age'] = df['age'].astype(int)
df['date'] = pd.to_datetime(df['date'])5. STANDARDISATION DES VALEURS
df['ville'] = df['ville'].str.strip().str.title()Numérique continu → médiane (robuste aux outliers) ou moyenne
Numérique discret → mode
Catégoriel → mode ou catégorie 'Inconnu'
Selon un groupe → groupby + transform('median')Documenter le choix d'imputation : il peut influencer fortement les résultats d'analyse.
import pandas as pd
import numpy as npnp.random.seed(42)
n = 100
df = pd.DataFrame({
'nom': [f'User_{i}' for i in range(n)],
'age': np.random.choice([np.nan, *range(18, 65)], n),
'salaire': np.random.choice([np.nan, *range(25000, 80000, 1000)], n),
'dept': np.random.choice(['Tech', 'RH', 'Finance', None], n),
})print('Avant:')
print(f' Shape: {df.shape}')
print(f' NaN: {df.isnull().sum().sum()}')# imputation
df['age'] = df['age'].fillna(df['age'].median())
df['salaire'] = df['salaire'].fillna(df.groupby('dept')['salaire'].transform('median'))
df['salaire'] = df['salaire'].fillna(df['salaire'].median()) # restant
df['dept'] = df['dept'].fillna('Inconnu')print('Après:')
print(f' NaN: {df.isnull().sum().sum()}')
print(f' Stats salaire: mean={df["salaire"].mean():.0f}, median={df["salaire"].median():.0f}')- aucune NaN inattendue
- types corrects (dtypes)
- valeurs aberrantes traitées
- cohérence métier (âge >= 0, etc.)En production, encapsuler ce pipeline en une fonction (ou un Pipeline sklearn avec ColumnTransformer) pour la réutiliser sur de nouveaux fichiers sans tout réécrire.
Envie d'aller plus loin ? Découvrez nos formations certifiées Bac+2 à Bac+5 →