Remplissage des valeurs manquantes après une fusion (fillna())

Après une fusion de DataFrames, il peut y avoir des valeurs manquantes (NaN) si certaines correspondances n’ont pas été trouvées dans l’un des DataFrames. La méthode fillna() permet de remplir ces valeurs manquantes avec une valeur spécifique ou en utilisant une méthode d’interpolation ou de propagation. Vous pouvez spécifier une valeur à utiliser pour remplacer les NaN, par exemple une valeur numérique comme 0, une valeur de texte comme une chaîne vide, ou même utiliser des méthodes comme la propagation des valeurs voisines avec method=’ffill’ (pour remplir avec la valeur précédente) ou method=’bfill’ (pour remplir avec la valeur suivante). Cette opération est particulièrement utile pour s’assurer que le DataFrame final ne contient pas de valeurs manquantes après une fusion, ce qui peut rendre les analyses ou modèles plus robustes.

Fonctions :

  • df.fillna(valeur)

    Permet de remplacer les valeurs manquantes (NaN) dans un DataFrame ou une Series par une valeur donnée ou une méthode de remplissage. Après une fusion (merge, join), il est fréquent d’avoir des NaN là où les données ne se recoupent pas : fillna() permet de rendre le jeu de données exploitable.

    Importation :

    import pandas as pd

    Attributs :

    Paramètre Type Description Valeur par défaut
    value scalar, dict, Series, ou DataFrame Valeur(s) à utiliser pour remplir les NaN. Peut être une valeur unique ou des valeurs spécifiques par colonne. Obligatoire
    method {'ffill', 'bfill'} Méthode de propagation des valeurs : 'ffill' (remplit avec la valeur précédente), 'bfill' (avec la suivante). None
    axis {0, 1} Applique le remplissage sur les lignes (0) ou colonnes (1). None
    inplace bool Si True, modifie le DataFrame directement sans retour de copie. False
    limit int Nombre maximum de remplissages consécutifs à effectuer. None

    Exemple de code :

    import pandas as pd
    
    # Exemple de DataFrame après une fusion
    df = pd.DataFrame({
        'id': [1, 2, 3, 4],
        'nom': ['Alice', 'Bob', 'Charlie', None],
        'age': [25, None, 30, None]
    })
    
    # Remplacer les valeurs manquantes
    df_rempli = df.fillna({
        'nom': 'Inconnu',
        'age': df['age'].mean()
    })
    
    print(df_rempli)

    Explication du code :

    1. Le DataFrame df contient des valeurs manquantes (None / NaN) dans les colonnes nom et age.
    2. df.fillna() remplit ces NaN :
      • La colonne nom est remplie par la chaîne 'Inconnu'.
      • La colonne age est remplie avec la moyenne des valeurs connues (df['age'].mean()).
    3. Le résultat (df_rempli) est un nouveau DataFrame sans NaN.
      ➡️ L’original (df) reste inchangé car inplace=False par défaut.

    🔸 Remarques pratiques

    • Très utile après une fusion (merge) ou une jointure externe (how='outer') : ces opérations créent souvent des NaN là où les données n’ont pas de correspondance.
      👉 Un fillna() propre garantit que le DataFrame reste cohérent et exploitable.

    • Utiliser method='ffill' ou 'bfill' est pratique pour combler des séries temporelles ou des données ordonnées.

    • Le dictionnaire passé dans value permet un remplissage personnalisé par colonne : pratique pour gérer différemment les colonnes numériques, catégorielles ou textuelles.

    • ⚠️ Attention :

      • df.fillna(inplace=True) modifie directement le DataFrame et ne retourne rien (None).
      • Vérifie toujours le type de tes colonnes après remplissage, en particulier si tu remplaces des NaN numériques par des chaînes. Tu risques d'avoir une colonne qui devient object alors que tu attendais un float.