web-dev-qa-db-fra.com

Comment filtrer dans NaN (pandas)?

J'ai un pandas dataframe (df), et je veux faire quelque chose comme:

newdf = df[(df.var1 == 'a') & (df.var2 == NaN)]

J'ai essayé de remplacer NaN par np.NaN, Ou 'NaN' Ou 'nan', Etc., mais rien ne vaut True. Il n'y a pas de pd.NaN.

Je peux utiliser df.fillna(np.nan) avant d'évaluer l'expression ci-dessus, mais cela semble hackish et je me demande si cela va interférer avec d'autres opérations pandas) qui reposent sur la possibilité d'identifier des NaN au format pandas plus tard.

J'ai l'impression qu'il devrait y avoir une réponse facile à cette question, mais d'une manière ou d'une autre, cela m'a échappé. Tout conseil est apprécié. Merci.

43
Gerhard

Cela ne fonctionne pas car NaN n'est égal à rien, y compris NaN. Utilisez pd.isnull(df.var2) à la place.

52
Mark Whitfield

La plus simple de toutes les solutions:

filtered_df = df[df['var2'].isnull()]

Ceci filtre et vous donne les lignes qui ont seulement des valeurs NaN dans la colonne 'var2'.

30
Gil Baggio

Les pandas utilisent la valeur NaN de numpy. Utilisation numpy.isnan pour obtenir un vecteur booléen d’une série pandas.

6
NicholasM