Numpy isnan() 在浮点数数组上失败(来自 pandas dataframe apply)

2023-12-29

我有一个浮点数组(一些正常数字,一些nan),它们是从 pandas 数据帧上的应用中产生的。

由于某种原因, numpy.isnan 在这个数组上失败,但是如下所示,每个元素都是浮点数,numpy.isnan 在每个元素上正确运行,变量的类型绝对是 numpy 数组。

这是怎么回事?!

set([type(x) for x in tester])
Out[59]: {float}

tester
Out[60]: 
array([-0.7000000000000001, nan, nan, nan, nan, nan, nan, nan, nan, nan,
   nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan,
   nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan,
   nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan,
   nan, nan], dtype=object)

set([type(x) for x in tester])
Out[61]: {float}

np.isnan(tester)
Traceback (most recent call last):

File "<ipython-input-62-e3638605b43c>", line 1, in <module>
np.isnan(tester)

TypeError: ufunc 'isnan' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe''

set([np.isnan(x) for x in tester])
Out[65]: {False, True}

type(tester)
Out[66]: numpy.ndarray

np.isnan可以应用于本机数据类型的 NumPy 数组(例如 np.float64):

In [99]: np.isnan(np.array([np.nan, 0], dtype=np.float64))
Out[99]: array([ True, False], dtype=bool)

但应用于对象数组时会引发 TypeError:

In [96]: np.isnan(np.array([np.nan, 0], dtype=object))
TypeError: ufunc 'isnan' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe''

既然你有 Pandas,你可以使用pd.isnull http://pandas.pydata.org/pandas-docs/stable/generated/pandas.isnull.html相反,它可以接受对象或本机数据类型的 NumPy 数组:

In [97]: pd.isnull(np.array([np.nan, 0], dtype=float))
Out[97]: array([ True, False], dtype=bool)

In [98]: pd.isnull(np.array([np.nan, 0], dtype=object))
Out[98]: array([ True, False], dtype=bool)

注意None在对象数组中也被视为空值。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Numpy isnan() 在浮点数数组上失败(来自 pandas dataframe apply) 的相关文章

随机推荐