【发布时间】:2022-01-13 06:29:52
【问题描述】:
在我正在处理的一些数据中,我遇到了float 类型的数据,这些数据用“nan”填充,即float('nan')。
但是检查它并没有按预期工作:
float('nan') == float('nan')
>> False
你可以用math.isnan查看,但由于我的数据也包含字符串(例如:'nan',还有其他用户输入),所以不太方便:
import math
math.isnan(float('nan'))
>> True
math.isnan('nan')
>> TypeError: must be real number, not str
在理想情况下,我想检查一个值是否在所有可能的 NaN 值的列表中,例如:
import numpy as np
if x in ['nan', np.nan, ... ]:
# Do something
pass
现在的问题:
我怎样才能在使用这种方法的同时检查float('nan') 值?以及为什么等于float('nan') == float('nan')False
【问题讨论】:
-
if x == 'nan' or isnan(x)…?! -
更好的是,使用
isnan并清理您的数据,这样您就不必担心“或者它实际上是一个字符串?” -
如果 x 不是实数,
if x == 'nan' or isnan(x)将引发 TypeError。清理是一种解决方案,但如果可能的话,我宁愿一次性完成所有事情。另外我还是很好奇为什么float('nan) == float('nan')等于False -
“但由于我的数据也包含字符串” - 听起来你应该先解决这个问题,然后使用
isnan。 -
“另外我还是很好奇为什么 float('nan) == float('nan') 等于 False” - 因为它的设计是这样的,
x != x将是一种方便的方法来测试 NaN没有isnan函数的设置(在 IEEE 754 的早期很常见),并且因为比较产生True实际上并没有更多用处。
标签: python