Le nettoyage des données prend indubitablement beaucoup de temps en science des données, et les données manquantes sont l’un des défis auxquels vous serez souvent confronté. Pandas est un outil de manipulation de données Python précieux qui vous aide à corriger les valeurs manquantes dans votre ensemble de données, entre autres choses.


Vous pouvez corriger les données manquantes en les supprimant ou en les remplaçant par d’autres valeurs. Dans cet article, nous allons expliquer et explorer les différentes façons de remplir les données manquantes en utilisant Pandas.

Configurer Pandas et préparer le jeu de données

Avant de commencer, assurez-vous d’installer pandas dans votre environnement virtuel Python à l’aide de la commande pip via votre terminal :

 pip install pandas

Vous pouvez suivre avec n’importe quel ensemble de données. Il peut s’agir d’un fichier Excel chargé avec Pandas.

Mais nous utiliserons les données fictives suivantes tout au long de cet article – il s’agit d’un DataFrame contenant des valeurs manquantes ou nulles (Nan).

 
import pandas
import numpy

df = pandas.DataFrame({
    'A' :[0, 3, numpy.nan, 10, 3, numpy.nan],
    'B' : [numpy.nan, numpy.nan, 7.13, 13.82, 7, 7],
    'C' : [numpy.nan, "Pandas", numpy.nan, "Pandas", "Python", "JavaScript"],
    'D' : ["Sound", numpy.nan, numpy.nan, "Music", "Songs", numpy.nan]
})

print(df)

Le jeu de données ressemble à ceci :

Jeu de données dans la console

Maintenant, regardez comment vous pouvez remplir ces valeurs manquantes en utilisant les différentes méthodes disponibles dans pandas.

1. Utiliser la méthode fillna()

La méthode fillna() parcourt votre ensemble de données et remplit toutes les lignes vides avec une valeur spécifiée. Il peut s’agir de la moyenne, de la médiane, de la valeur modale ou de toute autre valeur.

Cette opération pandas accepte certains arguments facultatifs ; prenez note de ce qui suit :

  • valeur: Il s’agit de la valeur calculée que vous souhaitez insérer dans les lignes manquantes.
  • méthode: Permet de remplir les valeurs manquantes en avant ou en arrière. Il accepte un bfill ou ffill paramètre.
  • en place: Ceci accepte une déclaration conditionnelle. Si Vraiil modifie le DataFrame de façon permanente. Sinon, il ne le fait pas.

Voyons les techniques de remplissage des données manquantes avec la fonction fillna() méthode.

Remplir les valeurs manquantes avec la moyenne, la médiane ou le mode

Cette méthode consiste à remplacer les valeurs manquantes par des moyennes calculées. Remplir les données manquantes par une valeur moyenne ou médiane est applicable lorsque les colonnes concernées ont des types de données entiers ou flottants.

Vous pouvez également compléter les données manquantes par la valeur du mode, qui est la valeur la plus fréquente. Cela s’applique également aux nombres entiers ou flottants. Mais c’est plus pratique lorsque les colonnes en question contiennent des chaînes de caractères.

Voici comment insérer la moyenne et la médiane dans les lignes manquantes du DataFrame :

 # To insert the mean value of each column into its missing rows:
df.fillna(df.mean(numeric_only=True).round(1), inplace=True)

# For median:
df.fillna(df.median(numeric_only=True).round(1), inplace=True)

print(df)

La numérique_uniquement L’argument True garantit que les tendances moyennes ne s’appliquent qu’aux colonnes contenant des nombres entiers et des nombres flottants.

Comme il n’est pas possible de calculer des moyennes numériques sur des colonnes contenant des chaînes de caractères, il est préférable d’obtenir la valeur modale pour ces colonnes. Cependant, nous utiliserons une approche légèrement différente pour la valeur modale :

 
string_columns = df.select_dtypes(include=['object']).columns
df[string_columns] = df[string_columns].fillna(df[string_columns].mode().iloc[0])

print(df)

Le code ci-dessus ne sélectionne que les colonnes de chaînes dans le DataFrame et remplit le Nan de chacune d’entre elles avec sa valeur modale.

Vous pouvez également insérer le mode dans une colonne spécifique, par exemple la colonne C:

 df['C'].fillna(df['C'].mode()[0], inplace=True)

Si vous souhaitez être spécifique à une colonne lors de l’insertion de la moyenne, de la médiane ou du mode :

 df.fillna({"A":df['A'].mean(), 
           "B": df['B'].median(),
           "C": df['C'].mode()[0]},
          inplace=True)
print(df)

Remplir les lignes nulles avec des valeurs à l’aide de ffill

Il s’agit de spécifier la direction de remplissage à l’intérieur de l’élément fillna() fonction. Cette méthode remplit chaque ligne manquante avec la valeur de la ligne supérieure la plus proche.

On pourrait aussi l’appeler remplissage par anticipation :

 df.fillna(method='ffill', inplace=True)

Remplir les lignes manquantes avec des valeurs en utilisant bfill

Ici, vous remplacerez l’élément ffill méthode mentionnée ci-dessus avec bfill. Il remplit chaque ligne manquante du DataFrame avec la valeur la plus proche située en dessous.

Cette méthode est appelée « backward-filling » (remplissage à rebours) :

 df.fillna(method='bfill', inplace=True) 

Vous pouvez combiner ffill et bfill pour remplir les données manquantes dans les deux sens. Cela permet d’éviter le remplissage partiel des données.

2. La méthode replace()

Cette méthode est pratique pour remplacer des valeurs autres que des cellules vides, car elle n’est pas limitée à Nan valeurs. Il modifie toute valeur spécifiée dans le DataFrame.

Cependant, comme la fonction fillna() vous pouvez utiliser la méthode replace() pour remplacer le Nan L’application permet de comparer les valeurs d’une colonne spécifique avec la moyenne, la médiane, le mode ou toute autre valeur. Il accepte également l’option inplace argument de mot-clé.

Voyez comment cela fonctionne en remplaçant les lignes nulles d’une colonne nommée par sa moyenne, sa médiane ou son mode :

 import pandas
import numpy

# Replace the null values with the mean:
df['A'].replace([numpy.nan], df['A'].mean(), inplace=True)

# Replace column A with the median:
df['B'].replace([numpy.nan], df['B'].median(), inplace=True)

# Use the modal value for column C:
df['C'].replace([numpy.nan], df['C'].mode()[0], inplace=True)
print(df)

3. Remplir les données manquantes avec interpolate()

Le interpolate() utilise les valeurs existantes dans le DataFrame pour estimer les lignes manquantes. La définition de la fonction inplace à True modifie le DataFrame de façon permanente.

Cependant, cette méthode ne s’applique qu’aux colonnes numériques, car elle utilise une estimation mathématique pour remplir les rôles manquants.

Exécutez le code suivant pour voir comment cela fonctionne :

 # Interpolate backwardly across the column:
df.interpolate(method ='linear', limit_direction ='backward', inplace=True)

# Interpolate in forward order across the column:
df.interpolate(method ='linear', limit_direction ='forward', inplace=True)

Le code ci-dessus ne retient automatiquement que les colonnes numériques dans le DataFrame.

Traiter les lignes manquantes avec précaution

Bien que nous n’ayons envisagé de remplir les données manquantes qu’avec des valeurs par défaut comme les moyennes, le mode et d’autres méthodes, il existe d’autres techniques pour corriger les valeurs manquantes. Les scientifiques des données, par exemple, suppriment parfois ces lignes manquantes, selon le cas.

Il est essentiel de réfléchir de manière critique à votre stratégie avant de l’utiliser. Sinon, vous risquez d’obtenir des résultats d’analyse ou de prédiction indésirables. Quelques stratégies initiales de visualisation des données et d’analyse peuvent également s’avérer utiles.