在Python / numpy / pandas中有效检查任意对象是否是NaN?

我的numpy数组使用np.nan来指定缺less的值。 当我迭代数据集时,我需要检测这些缺失的值并以特殊的方式处理它们。

numpy.isnan(val)我使用numpy.isnan(val) ,它工作得很好,除非val不是numpy.isnan()支持的types的子集。 例如,缺less的数据可能出现在string字段中,在这种情况下,我得到:

 >>> np.isnan('some_string') Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: Not implemented for this type 

除了写一个昂贵的包装,捕捉exception并返回False ,有没有办法处理这个优雅和高效?

pandas.isnull()检查数字和string/对象数组中的缺失值。 从文档中,它检查:

数字数组中的NaN,对象数组中的None / NaN

快速示例:

 import pandas as pd import numpy as np s = pd.Series(['apple', np.nan, 'banana']) pd.isnull(s) Out[9]: 0 False 1 True 2 False dtype: bool 

使用numpy.nan代表缺失值的想法是pandas引入的,这就是pandas有处理它的工具的原因。

date时间(如果您使用pd.NaT ,则不需要指定pd.NaT

 In [24]: s = Series([Timestamp('20130101'),np.nan,Timestamp('20130102 9:30')],dtype='M8[ns]') In [25]: s Out[25]: 0 2013-01-01 00:00:00 1 NaT 2 2013-01-02 09:30:00 dtype: datetime64[ns]`` In [26]: pd.isnull(s) Out[26]: 0 False 1 True 2 False dtype: bool 

你的types真的是任意的吗? 如果你知道它只是一个int浮点数或string,你可以做

  if val.dtype == float and np.isnan(val): 

假设它被包裹在numpy中,它将总是有一个dtype,只有float和complex可以是NaN