web-dev-qa-db-fra.com

Vérifier si la valeur particulière (dans la cellule) est NaN dans les pandas DataFrame ne fonctionne pas avec ix ou iloc

Disons que j'ai pandasDataFrame suivant:

import pandas as pd
df = pd.DataFrame({"A":[1,pd.np.nan,2], "B":[5,6,0]})

Qui ressemblerait à:

>>> df
     A  B
0  1.0  5
1  NaN  6
2  2.0  0

Première option

Je connais un moyen de vérifier si une valeur particulière est NaN, qui est la suivante:

>>> df.isnull().ix[1,0]
True

Deuxième option (ne fonctionne pas)

Je pensais que l'option ci-dessous, en utilisant ix, fonctionnerait aussi bien, mais ce n'est pas:

>>> df.ix[1,0]==pd.np.nan
False

J'ai aussi essayé iloc avec les mêmes résultats:

>>> df.iloc[1,0]==pd.np.nan
False

Cependant, si je vérifie ces valeurs en utilisant ix ou iloc, je reçois:

>>> df.ix[1,0]
nan
>>> df.iloc[1,0]
nan

Alors, pourquoi la deuxième option ne fonctionne-t-elle pas? Est-il possible de vérifier les valeurs NaN à l'aide de ix ou iloc?

10
Cedric Zoppolo

Essaye ça:

In [107]: pd.isnull(df.iloc[1,0])
Out[107]: True
19
MaxU

La réponse ci-dessus est excellente. Voici la même chose avec un exemple pour une meilleure compréhension.

>>> import pandas as pd
>>>
>>> import numpy as np
>>>
>>> pd.Series([np.nan, 34, 56])
0     NaN
1    34.0
2    56.0
dtype: float64
>>>
>>> s = pd.Series([np.nan, 34, 56])
>>> pd.isnull(s[0])
True
>>>

J'ai aussi essayé plusieurs fois, les essais suivants n'ont pas fonctionné. Merci à @MaxU.

>>> s[0]
nan
>>>
>>> s[0] == np.nan
False
>>>
>>> s[0] is np.nan
False
>>>
>>> s[0] == 'nan'
False
>>>
>>> s[0] == pd.np.nan
False
>>>
1
hygull