Si vous souhaitez sélectionner les lignes contenant au moins une valeur NaN, vous pouvez utiliser la méthode suivante isna
+ any
en axis=1
:
df[df.isna().any(axis=1)]
Si vous souhaitez sélectionner les lignes contenant un certain nombre de valeurs NaN, vous pouvez utiliser la méthode suivante isna
+ sum
en axis=1
+ gt
. Par exemple, le code suivant récupérera les lignes contenant au moins 2 valeurs NaN :
df[df.isna().sum(axis=1)>1]
Si vous souhaitez limiter la vérification à des colonnes spécifiques, vous pouvez d'abord les sélectionner, puis vérifier :
df[df[['Col1', 'Col2']].isna().any(axis=1)]
Si vous souhaitez sélectionner les lignes contenant toutes les valeurs NaN, vous pouvez utiliser la méthode suivante isna
+ all
en axis=1
:
df[df.isna().all(axis=1)]
Si vous souhaitez sélectionner des lignes ne contenant aucune valeur NaN, vous pourriez notna
+ all
en axis=1
:
df[df.notna().all(axis=1)]
Ceci est équivalent à :
df[df['Col1'].notna() & df['Col2'].notna() & df['Col3'].notna()]
ce qui peut devenir fastidieux si les colonnes sont nombreuses. Au lieu de cela, vous pouvez utiliser functools.reduce
à la chaîne &
opérateurs :
import functools, operator
df[functools.reduce(operator.and_, (df[i].notna() for i in df.columns))]
ou numpy.logical_and.reduce
:
import numpy as np
df[np.logical_and.reduce([df[i].notna() for i in df.columns])]
Si vous cherchez à filtrer les lignes où il n'y a pas de NaN dans une colonne en utilisant query
vous pouvez le faire en utilisant engine='python'
paramètre :
df.query('Col2.notna()', engine='python')
ou utiliser le fait que NaN!=NaN
comme @MaxU - arrêtez le WAR contre UA
df.query('Col2==Col2')