Exemples de comment remplacer les lignes avec des valeurs manquantes (NaN) dans une dataframe en utilisant les valeurs des lignes précédentes avec pandas:
Créer une dataframe avec des valeurs NaN
Commençons par créer une dataframe avec des pandas avec des valeurs manquantes:
import pandas as pd
import numpy as np
data = np.random.randint(100, size=(10,3))
df = pd.DataFrame(data=data,columns=['A','B','C'])
df.iloc[2,0:2] = np.nan
donne
A B C
0 16.0 4.0 90
1 78.0 16.0 1
2 NaN NaN 94
3 1.0 49.0 8
4 88.0 13.0 68
5 56.0 4.0 40
6 36.0 27.0 82
7 34.0 37.0 64
8 6.0 38.0 55
9 98.0 32.0 39
Remplacement des valeurs manquantes avec ffill
Pour remplacer les lignes avec des valeurs manquantes en utilisant les valeurs des lignes précédentes avec pandas, une solution consiste à utiliser pandas.DataFrame.ffill:
df.ffill(inplace=True)
donne
A B C
0 16.0 4.0 90
1 78.0 16.0 1
2 78.0 16.0 94
3 1.0 49.0 8
4 88.0 13.0 68
5 56.0 4.0 40
6 36.0 27.0 82
7 34.0 37.0 64
8 6.0 38.0 55
9 98.0 32.0 39
Remarque: les valeurs manquantes ont été remplacées par les valeurs de la ligne juste au-dessus.
Remplacement de plusieurs lignes consécutives avec des valeurs manquantes
Un autre exemple avec plusieurs lignes consécutives avec des valeurs manquantes
import pandas as pd
import numpy as np
data = np.random.randint(100, size=(10,3))
df = pd.DataFrame(data=data,columns=['A','B','C'])
df.iloc[2,0:2] = np.nan
df.iloc[3,1:2] = np.nan
df.iloc[4,0:2] = np.nan
df.iloc[5,1:3] = np.nan
donne
A B C
0 83.0 0.0 50.0
1 27.0 29.0 18.0
2 NaN NaN 89.0
3 82.0 NaN 37.0
4 NaN NaN 76.0
5 42.0 NaN NaN
6 0.0 78.0 80.0
7 38.0 50.0 69.0
8 31.0 93.0 77.0
9 36.0 74.0 83.0
alors
df.ffill(inplace=True)
donne
A B C
0 83.0 0.0 50.0
1 27.0 29.0 18.0
2 27.0 29.0 89.0
3 82.0 29.0 37.0
4 82.0 29.0 76.0
5 42.0 29.0 76.0
6 0.0 78.0 80.0
7 38.0 50.0 69.0
8 31.0 93.0 77.0
9 36.0 74.0 83.0
Remplacement des valeurs manquantes en utilisant DataFrame.fillna()
Remarque: ffill() est synonyme de DataFrame.fillna () avec method ='ffill'.
df.fillna(method='ffill')
donne aussi
A B C
0 16.0 4.0 90
1 78.0 16.0 1
2 78.0 16.0 94
3 1.0 49.0 8
4 88.0 13.0 68
5 56.0 4.0 40
6 36.0 27.0 82
7 34.0 37.0 64
8 6.0 38.0 55
9 98.0 32.0 39