Comment supprimer les lignes avec des NaN dans une dataframe avec pandas ?

Published: 04 août 2020

Tags: Python; Pandas; DataFrame;

DMCA.com Protection Status

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

Références