在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