开发者社区> 问答> 正文

Numpy isnan()在浮点数组上失败(适用于pandas数据框)

我有一个浮点数数组(一些正常数字,一些nans),它们是从对熊猫数据框的应用中得出的。

由于某种原因,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 " ", line 1, in 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 问题来源于stack overflow

展开
收起
保持可爱mmm 2020-02-08 14:18:20 654 0
1 条回答
写回答
取消 提交回答
  • np.isnan 可以应用于本机dtype的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因此可以改用-它可以接受对象或本机dtypes的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在对象数组中也将其视为空值。

    2020-02-08 14:18:32
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
中文:即学即用的Pandas入门与时间序列分析 立即下载
即学即用的Pandas入门与时间序列分析 立即下载
低代码开发师(初级)实战教程 立即下载