Exemples de comment supprimer les lignes avec des NaN dans une dataframe avec pandas:
Créer une dataframe avec pandas
Soit par exemple la dataframe avec pandas suivante
import pandas as pd
import numpy as np
A = np.random.randint(1,100, size=(10,3))
A = A * 1.0
n = 6
index = np.random.choice(A.size, n, replace=False)
A.ravel()[index] = np.nan
df = pd.DataFrame(A)
print(df)
donne
0 1 2
0 60.0 42.0 43.0
1 47.0 87.0 99.0
2 80.0 44.0 48.0
3 48.0 NaN 46.0
4 NaN 90.0 NaN
5 99.0 61.0 63.0
6 NaN 35.0 NaN
7 95.0 56.0 13.0
8 29.0 80.0 52.0
9 83.0 NaN 87.0
Trouver les lignes avec des NaN
Pour trouver les indices des lignes avec des NaN, une solution est de faire comme ceci:
index_with_nan = df.index[df.isnull().any(axis=1)]
print(index_with_nan)
done dans cet exemple
Int64Index([3, 4, 6, 9], dtype='int64')
Trouver le nombre de NaN par lignes
On peut aussi obtenir le nombre de NaN par ligne:
print(df.isnull().sum(axis=1))
donne
0 0
1 0
2 0
3 1
4 2
5 0
6 2
7 0
8 0
9 1
dtype: int64
Supprimer les lignes avec des NaN
Pour supprimer les lignes avec des NaN on peut utiliser la fonction drop()
df.drop(index_with_nan,0, inplace=True)
print(df)
donne
0 1 2
0 60.0 42.0 43.0
1 47.0 87.0 99.0
2 80.0 44.0 48.0
5 99.0 61.0 63.0
7 95.0 56.0 13.0
8 29.0 80.0 52.0
Supprimer les lignes avec des NaN dans une colonne donnée
Autre exemple on supprimant les lignes avec des NaN dans une colonne donnée (colonne d'indice 1 par exemple)
print( df.iloc[:,1].isnull() )
donne
0 False
1 False
2 False
3 True
4 False
5 False
6 False
7 False
8 False
9 True
Name: 1, dtype: bool
et
index_with_nan = df.index[df.iloc[:,1].isnull()]
df.drop(index_with_nan,0, inplace=True)
print(df)
donne
0 1 2
0 60.0 42.0 43.0
1 47.0 87.0 99.0
2 80.0 44.0 48.0
4 NaN 90.0 NaN
5 99.0 61.0 63.0
6 NaN 35.0 NaN
7 95.0 56.0 13.0
8 29.0 80.0 52.0