Comment remplacer les NANs dans une dataframe avec pandas en python ?

Comment remplacer les NANs dans une dataframe avec pandas en python ?

Daidalos 17 juin 2020


Exemples de comment remplacer les NANs dans une dataframe avec pandas en python:

1 -- Créer une dataframe avec pandas

Soit par exemple la dataframe suivante:

import pandas as pd
import numpy as np

data = {'Name':['Ben','Anna','Zoe','Tom','John','Steve'], 
        'Age':[20,27,43,30,np.nan,np.nan], 
        'Gender':['M',np.nan,'F','M','M','M']}

df = pd.DataFrame(data)

qui donne

    Name   Age Gender
0    Ben  20.0      M
1   Anna  27.0    NaN
2    Zoe  43.0      F
3    Tom  30.0      M
4   John   NaN      M
5  Steve   NaN      M

2 -- Remplacer tous les NaNs

Pour remplacer tous les NaN dans la datframe il existe la fonction pandas fillna(), illustration

df.fillna('',inplace=True)

print(df)

donne

    Name Age Gender
0    Ben  20      M
1   Anna  27       
2    Zoe  43      F
3    Tom  30      M
4   John          M
5  Steve          M

3 -- Remplacer les NaNs dans une colonne donnée

Exemple de comment remplacer les NaNs dans une colonne donnée 'Gender':

df['Gender'].fillna('',inplace=True)

print(df)

donne

    Name   Age Gender
0    Ben  20.0      M
1   Anna  27.0       
2    Zoe  43.0      F
3    Tom  30.0      M
4   John   NaN      M
5  Steve   NaN      M

4 -- Remplacer les NaNs en fonction du type de la colonne

On peut aussi utiliser la méthode dtypes pour changer les NaNs en fonction du type de colonne :

df.dtypes

Name      object
Age       float64
Gender    object
dtype: object

exemple

for index, value in df.dtypes.items(): 
    if value == 'object':
        df[index] = df[index].fillna('')
    else:
        df[index] = df[index].fillna(0)

print(df)

donne

    Name   Age Gender
0    Ben  20.0      M
1   Anna  27.0       
2    Zoe  43.0      F
3    Tom  30.0      M
4   John   0.0      M
5  Steve   0.0      M

5 -- Références