如何在列表理解中检查np.nan?

时间:2017-08-29 14:15:28

标签: python-3.x list-comprehension nan

我有一个函数应该返回一个整数元组或np.nan。

return tuple(int(round(n)) if n is not np.nan else n for n in r)

代码对我来说很好,但我得到以下错误,我无法弄清楚出了什么问题。

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-7-368ab2ecd3f3> in <module>()
      6 warnings.filterwarnings("ignore") #ignore numpy warnings
      7 for k,v in bb_mapping.items():
----> 8     print(k, map_overview(v))

<ipython-input-2-6f1dc6e291ee> in map_overview(map_tuples)
    120 
    121     r = (np.mean(bb_len), np.std(bb_len), np.mean(ins_len), np.std(ins_len))
--> 122     return tuple(int(round(n)) if n is not np.nan else n for n in r)
    123 
    124 def print_sbar(n,m,s='|#.|',size=30,message=''):

<ipython-input-2-6f1dc6e291ee> in <genexpr>(.0)
    120 
    121     r = (np.mean(bb_len), np.std(bb_len), np.mean(ins_len), np.std(ins_len))
--> 122     return tuple(int(round(n)) if n is not np.nan else n for n in r)
    123 
    124 def print_sbar(n,m,s='|#.|',size=30,message=''):

ValueError: cannot convert float NaN to integer

如果在将np.nan值转换为整数之前明确检查np.nan值,我怎么能得到这个错误?

很奇怪,如果我手动检查返回代码,列表理解按预期工作:

>>> print(tuple(int(round(n)) if n is not np.nan else n for n in [12.6,np.nan,0.5,4.6]))
(13, nan, 0, 5)

我在这里缺少什么?

1 个答案:

答案 0 :(得分:1)

为什么要与echo $_COOKIE["imgPath"];进行比较?不同的值可能不一定是同一个实例。对于整数和浮点数都是如此。 (CPython对小整数的怪癖是我所知道的唯一例外,并且严格来说是一个实现细节。)

is

您可以使用>>> import math >>> float('nan') is math.nan False 检查nan或内置np.isnan,或检查该值是否等于自身。

math.isnan