Le nettoyage des données (Data Cleaning) est une étape essentielle du processus de préparation des données. Il s’agit d’identifier et de traiter les problèmes de ton ensemble de données afin d’en garantir la qualité et la fiabilité.
Traitement des données manquantes #
Les données manquantes sont un problème courant dans les ensembles de données du monde réel. Pandas propose des méthodes pour gérer efficacement les valeurs manquantes.
.isna()
et.notna()
: Ces méthodes t permettent d’identifier les valeurs manquantes (NaN
) et non manquantes, respectivement, dans ton DataFrame. L’application de cette méthode à une colonne renverra la liste booléenne avecTrue
pour les indices où il y a une valeur manquante. En passant cette liste dans un DataFraùe, tu obtiendras les lignes où les valeurs de cette colonne sont nulles.
missing_data = df[df['Column'].isna()] # Pour obtenir la somme des valeurs manquantes (null) dans une colonne df.Column.isna().sum() # Pour obtenir la somme des valeurs manquantes (null) pour chaque colonne df.isna().sum()
.fillna()
: Tu peux remplacer les valeurs manquantes par une valeur spécifiée ou une valeur calculée à l’aide de la méthode.fillna()
. L’exemple ci-dessous remplace toutes les valeurs manquantes (null) par des zéros et modifie directement les données comme nous l’avons fait avecinplace = True
.
# spécifier la valeur par laquelle tu souhaites compléter la valeur manquante # Dans l'exemple ci-dessous, nous remplaçons la valeur manquante par zéro. df['Column'].fillna(value=0, inplace=True) # Si tu souhaites remplir les données manquantes avec la moyenne de la colonne numérique df['Column'].fillna(value=df['Column'].mean(), inplace=True) # Si tu souhaites remplir les données manquantes avec la médiane de la colonne numérique df['Column'].fillna(value=df['Column'].median(), inplace=True) # Si tu souhaites remplir des données manquantes avec le mode de la colonne catégorielle df['Column'].fillna(value=df['Column'].mode(), inplace=True)
.dropna()
: Cette méthode permet de supprimer les lignes ou les colonnes contenant des valeurs manquantes. Par défaut, elle supprimera les lignes (axis = 0
) pour lesquelles l’une des valeurs de la colonne est manquante (how = 'any'
).
# Par défaut axis=0, how='any'. Supprime toutes les lignes pour lesquelles une colonne est manquante. df.dropna() # Si tu souhaites que la vérification ne porte que sur certaines colonnes, utilise le sous-ensemble. # Supprime les lignes où l'une des valeurs de la colonne 1 ou de la colonne 2 est manquante. df.dropna(subset=['Column1', 'Column 2'], how = 'any', inplace=True) # Supprime la colonne si l'une des valeurs de la colonne est manquante, ce qui n'est pas recommandé. df.dropna(axis=1)
Notes :
- En utilisant
how = 'any'
, les lignes où l’une des valeurs de la colonne est manquante seront supprimées. - En utilisant
how = 'all'
, les lignes où toutes les valeurs des colonnes spécifiées sont manquantes seront supprimées.
Suppression des doublons #
Les lignes en double peuvent fausser les résultats de ton analyse. Pandas propose une méthode simple pour supprimer les doublons :
.duplicated()
: Cette méthode permet d’identifier les lignes dupliquées dans un DataFrame.
# Résultats des colonnes dupliquées # lorsqu'il y a une autre ligne avec une correspondance exacte de toutes les colonnes. duplicates = df[df.duplicated()] # Résultats des colonnes dupliquées # lorsqu'il y a une correspondance entre les colonnes spécifiées duplicates = df[df.duplicated(subset=['column1','column2'])]
Note :
- Par défaut
duplicated
, utilisekeep='first'
, qui conserve la première ligne observée dans le DataFrame et marque les lignes observées ultérieurement commeTrue
, ce qui indique qu’il s’agit de lignes dupliquées. - Si tu souhaites conserver la dernière ligne dupliquée observée dans le DataFrame, tu peux donner
keep='last'
. - Si tu veux voir tous les doublons, tu peux indiquer
keep='False'
. - Si tu souhaites vérifier les doublons sur la base de colonnes spécifiques, tu dois indiquer :
.drop_duplicates()
: Cette méthode permet de supprimer les lignes en double du DataFrame.
# Avant de supprimer les lignes dupliquées, # si tu veux vérifier le nombre de lignes dupliquées. df.duplicated(subset=['column1','column2']).sum() # Eliminer les lignes dupliquées, la ligne ci-dessous affichera les données après la suppression. df.drop_duplicates() # Il est conseillé de vérifier la forme après la suppression des valeurs en doublon avant de l'enregistrer. df.drop_duplicates().shape # Si tu es satisfait de la forme obtenue, tu peux l'enregistrer. df.drop_duplicates(inplace=True)
Conversion des types de données #
Des types de données corrects sont essentiels pour l’analyse des données. Pandas fournit des méthodes pour convertir les types de données si nécessaire.
.astype()
: Tu peux modifier le type de données d’une colonne spécifique à l’aide de la méthode.astype()
. Prenons le cas où le prix d’un article est enregistré dans le type de donnéesobject
, tu dois alors le changer enfloat
.
Note : astype
est également utile pour convertir les booléens en int
, en gros pour toutes les valeurs True
il remplacera par 1
, et les False
par 0
.
# Pour voir les types de données de toutes les colonnes df.dtypes # Pour modifier le type de données d'une colonne df['Column'] = df['Column'].astype('float') # Conversion des colonnes/séries avec 'Male' en 1 df.Sex = pd.Series(df.Sex == 'Male').astype('int')
Opérations String #
Lorsque l’on travaille avec des données textuelles, Pandas propose des opérations sur les chaînes de caractères (string) par l’intermédiaire de .str
, un accesseur à appliquer à l’ensemble de la colonne qui est de type object
.
.str.lower()
et.str.upper()
: Ces méthodes convertissent les chaînes en minuscules ou en majuscules pour l’ensemble des valeurs de la colonne..str.replace()
: Utilise cette méthode pour remplacer les sous-chaînes dans les chaînes..str.Contains()
: Cette méthode te permet de vérifier si une sous-chaîne ou un motif spécifique existe dans une chaîne. Elle renvoie une série booléenne indiquant si chaque élément contient le motif spécifié..str.slice()
: Tu peux extraire une sous-chaîne de chaque chaîne d’une série à l’aide de la méthode.str.slice()
. Spécifie les positions de début et de fin pour définir la tranche.
# Convertit toutes les valeurs des colonnes du nom en minuscules df['Name'] = df['Name'].str.lower() # Convertit toutes les valeurs des colonnes du nom en majuscules df['Name'] = df['Name'].str.upper() # Recherche d'une valeur dans la colonne contains_pattern = df['Text'].str.contains('keyword') filtered_data = df[contains_pattern] # Tranche de chaîne df['Substring'] = df['Text'].str.slice(start=2, stop=5) # Remplacement de chaîne, disons que tu veux convertir l'objet $5.4 en un float df.price.str.replace('$','').astype('float') # Utilisation des opérations sur les chaînes et astype df.item_name.str.contains('chicken').astype('int')