Comment remplacer les lignes avec des valeurs manquantes (NaN) dans une dataframe en utilisant les valeurs des lignes précédentes avec pandas ?

Published: 03 mai 2021

Tags: Python; Pandas; DataFrame;

DMCA.com Protection Status

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

Références