Netoyage de donnée en pandas

Le nettoyage des données signifie réparer les mauvaises données dans votre ensemble de données.

Les mauvaises données peuvent être :

  • Cellules vides
  • Données au mauvais format
  • Données erronées
  • Doublons

Cellules vides:

Une façon de traiter les cellules vides consiste à supprimer les lignes contenant des cellules vides. C'est généralement correct, car les ensembles de données peuvent être très volumineux et la suppression de quelques lignes n'aura pas un grand impact sur le résultat.

import pandas as pd
df = pd.read_csv('https://www.w3schools.com/python/pandas/dirtydata.csv')
print(df.shape)
new_df = df.dropna()
new_df
print(new_df.shape)

Output:

(32, 5)
(29, 5)

Une autre façon de gérer les cellules vides consiste à insérer une nouvelle valeur à la place.

De cette façon, vous n'avez pas à supprimer des lignes entières simplement à cause de certaines cellules vides.

La méthode fillna() nous permet de remplacer les cellules vides par une valeur :

import pandas as pd
df = pd.read_csv('https://www.w3schools.com/python/pandas/dirtydata.csv')
print(df.shape)
print(df.loc[20:25,:])
df.fillna(130, inplace = True)
print(df.shape)
print(df.loc[20:25,:])

Output:

(32, 5)
    Duration          Date  Pulse  Maxpulse  Calories
20        45  '2020/12/20'     97       125     243.0
21        60  '2020/12/21'    108       131     364.2
22        45           NaN    100       119     282.0
23        60  '2020/12/23'    130       101     300.0
24        45  '2020/12/24'    105       132     246.0
25        60  '2020/12/25'    102       126     334.5
(32, 5)
    Duration          Date  Pulse  Maxpulse  Calories
20        45  '2020/12/20'     97       125     243.0
21        60  '2020/12/21'    108       131     364.2
22        45           130    100       119     282.0
23        60  '2020/12/23'    130       101     300.0
24        45  '2020/12/24'    105       132     246.0
25        60  '2020/12/25'    102       126     334.5

Une manière courante de remplacer les cellules vides consiste à calculer la valeur moyenne, médiane ou modale de la colonne.

Pandas utilise les méthodes mean(), median() et mode() pour calculer les valeurs respectives d'une colonne spécifiée :

import pandas as pd
df = pd.read_csv('https://www.w3schools.com/python/pandas/dirtydata.csv')
print(df.shape)
print(df.loc[16:20,:])
x = df["Calories"].mean()
df["Calories"].fillna(x, inplace = True)
print(df.shape)
print(df.loc[16:20,:])

Output:

(32, 5)
    Duration          Date  Pulse  Maxpulse  Calories
16        60  '2020/12/16'     98       120     215.2
17        60  '2020/12/17'    100       120     300.0
18        45  '2020/12/18'     90       112       NaN
19        60  '2020/12/19'    103       123     323.0
20        45  '2020/12/20'     97       125     243.0
(32, 5)
    Duration          Date  Pulse  Maxpulse  Calories
16        60  '2020/12/16'     98       120    215.20
17        60  '2020/12/17'    100       120    300.00
18        45  '2020/12/18'     90       112    304.68
19        60  '2020/12/19'    103       123    323.00
20        45  '2020/12/20'     97       125    243.00

Données de mauvais format:

Les cellules contenant des données au mauvais format peuvent rendre difficile, voire impossible, l'analyse des données.

Pour résoudre ce problème, vous avez deux options : supprimer les lignes ou convertir toutes les cellules des colonnes dans le même format.

import pandas as pd
df = pd.read_csv('https://www.w3schools.com/python/pandas/dirtydata.csv')
print(df.loc[20:23,:])
df['Date'] = pd.to_datetime(df['Date'])
print(df.loc[20:23,:])

Output:

Duration          Date  Pulse  Maxpulse  Calories
20        45  '2020/12/20'     97       125     243.0
21        60  '2020/12/21'    108       131     364.2
22        45           NaN    100       119     282.0
23        60  '2020/12/23'    130       101     300.0
    Duration       Date  Pulse  Maxpulse  Calories
20        45 2020-12-20     97       125     243.0
21        60 2020-12-21    108       131     364.2
22        45        NaT    100       119     282.0
23        60 2020-12-23    130       101     300.0

Données erronées

import pandas as pd
df = pd.read_csv('https://www.w3schools.com/python/pandas/dirtydata.csv')
print(df.loc[5:9,:])
for x in df.index:
  if df.loc[x, "Duration"] > 120:
    df.loc[x, "Duration"] = 120
print(df.loc[5:9,:])

Output:

Duration          Date  Pulse  Maxpulse  Calories
5        60  '2020/12/06'    102       127     300.0
6        60  '2020/12/07'    110       136     374.0
7       450  '2020/12/08'    104       134     253.3
8        30  '2020/12/09'    109       133     195.1
9        60  '2020/12/10'     98       124     269.0
   Duration          Date  Pulse  Maxpulse  Calories
5        60  '2020/12/06'    102       127     300.0
6        60  '2020/12/07'    110       136     374.0
7       120  '2020/12/08'    104       134     253.3
8        30  '2020/12/09'    109       133     195.1
9        60  '2020/12/10'     98       124     269.0

On peut supprimer toute la ligne à l'aide de:

for x in df.index:
  if df.loc[x, "Duration"] > 120:
    df.drop(x, inplace = True)

Doublons:

Les lignes en double sont des lignes qui ont été enregistrées plus d'une fois.

import pandas as pd
df = pd.read_csv('https://www.w3schools.com/python/pandas/dirtydata.csv')
duplicated=df.duplicated()
print(duplicated[10:15])

Output:

10    False
11    False
12     True
13    False
14    False
dtype: bool

Pour supprimer les doublons, utilisez la méthode drop_duplicates().

import pandas as pd
df = pd.read_csv('https://www.w3schools.com/python/pandas/dirtydata.csv')
print(df.loc[10:15,:])
df.drop_duplicates(inplace = True)
print(df.loc[10:15,:])

Output:

Duration          Date  Pulse  Maxpulse  Calories
10        60  '2020/12/11'    103       147     329.3
11        60  '2020/12/12'    100       120     250.7
12        60  '2020/12/12'    100       120     250.7
13        60  '2020/12/13'    106       128     345.3
14        60  '2020/12/14'    104       132     379.3
15        60  '2020/12/15'     98       123     275.0
    Duration          Date  Pulse  Maxpulse  Calories
10        60  '2020/12/11'    103       147     329.3
11        60  '2020/12/12'    100       120     250.7
13        60  '2020/12/13'    106       128     345.3
14        60  '2020/12/14'    104       132     379.3
15        60  '2020/12/15'     98       123     275.0