Le nettoyage des données signifie réparer les mauvaises données dans votre ensemble de données.
Les mauvaises données peuvent être :
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
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
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)
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