问题:高效地检查Python / numpy / pandas中的任意对象是否为NaN?
我的numpy数组用于np.nan
指定缺失值。当我遍历数据集时,我需要检测这些缺失值并以特殊方式处理它们。
我天真地使用过numpy.isnan(val)
,除非val
不在所支持的类型子集中,numpy.isnan()
。例如,字符串字段中可能会丢失数据,在这种情况下,我得到:
>>> np.isnan('some_string')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: Not implemented for this type
除了编写昂贵的包装程序以捕获异常并返回之外 False
,还有没有办法优雅而有效地处理此问题?
回答 0
pandas.isnull()
(也是pd.isna()
,在较新版本中)检查数字数组和字符串/对象数组中的缺失值。从文档中,它检查:
数字数组中的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
有工具来处理它的原因。
日期时间也是如此(如果使用pd.NaT
,则无需指定dtype)
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
回答 1
您的类型是真的武断吗?如果您知道它将只是一个int浮点数或字符串,则可以这样做
if val.dtype == float and np.isnan(val):
假设它包装在numpy中,它将始终具有dtype,并且只有float和complex可以为NaN
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。