使用 ix 或 iloc 检查熊猫 DataFrame 中的特定值(单元格中)是否为 NaN

让我们说我有以下 pandas DataFrame:

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

看起来像是:

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

第一个选择

我知道一种检查特定值是否为 NaN的方法,如下所示:

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

第二个选择(不起作用)

我认为下面的选项,使用 ix,将工作,以及,但它不是:

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

我还尝试了 iloc,结果也是一样:

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

然而,如果我使用 ixiloc检查这些值,我会得到:

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

那么,为什么第二个选择不起作用?是否可以使用 ixiloc检查 NaN值?

146705 次浏览

试试这个:

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

更新: 在一个新的熊猫版本中使用 我不知道:

In [7]: pd.isna(df.iloc[1,0])
Out[7]: True

上面的答案非常好,这里也有一个例子可以帮助你更好的理解。

>>> 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
>>>

我也尝试了几次,以下的试验没有工作。感谢 @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
>>>

pd.isna(cell_value)可以用来检查给定的单元格值是否为 nan。

来自大熊猫的源代码:

def isna(obj):
"""
Detect missing values for an array-like object.


This function takes a scalar or array-like object and indicates
whether values are missing (``NaN`` in numeric arrays, ``None`` or ``NaN``
in object arrays, ``NaT`` in datetimelike).


Parameters
----------
obj : scalar or array-like
Object to check for null or missing values.


Returns
-------
bool or array-like of bool
For scalar input, returns a scalar boolean.
For array input, returns an array of boolean indicating whether each
corresponding element is missing.


See Also
--------
notna : Boolean inverse of pandas.isna.
Series.isna : Detect missing values in a Series.
DataFrame.isna : Detect missing values in a DataFrame.
Index.isna : Detect missing values in an Index.


Examples
--------
Scalar arguments (including strings) result in a scalar boolean.


>>> pd.isna('dog')
False


>>> pd.isna(np.nan)
True

我想了个办法:

x = [np.nan]


In [4]: x[0] == np.nan
Out[4]: False

但是:

In [5]: np.nan in x
Out[5]: True

您可以看到列表包含方法 实施,以了解其工作原理。