mar*_*cog 249
从字符串转换使用float():
>>> float('NaN')
nan
>>> float('Inf')
inf
>>> -float('Inf')
-inf
>>> float('Inf') == float('Inf')
True
>>> float('Inf') == 1
False
Oli*_*ier 75
是的,你可以用numpy它.
import numpy as np
a = arange(3,dtype=float)
a[0] = np.nan
a[1] = np.inf
a[2] = -np.inf
a # is now [nan,inf,-inf]
np.isnan(a[0]) # True
np.isinf(a[1]) # True
np.isinf(a[2]) # True
MSe*_*ert 34
是否可以将数字设置为NaN或无穷大?
是的,实际上有几种方法.一些没有任何导入的工作,而其他人需要import,但是对于这个答案,我将概述中的库限制为标准库和NumPy(这不是标准库,而是非常常见的第三方库).
下表总结了如何创建非数字或正无穷大的方式float:
?????????????????????????????????????????????????????????????????????
?   result ? NaN          ? Infinity           ? -Infinity          ?
? module   ?              ?                    ?                    ?
?????????????????????????????????????????????????????????????????????
? built-in ? float("nan") ? float("inf")       ? -float("inf")      ?
?          ?              ? float("infinity")  ? -float("infinity") ?
?          ?              ? float("+inf")      ? float("-inf")      ?
?          ?              ? float("+infinity") ? float("-infinity") ?
?????????????????????????????????????????????????????????????????????
? math     ? math.nan     ? math.inf           ? -math.inf          ?
?????????????????????????????????????????????????????????????????????
? cmath    ? cmath.nan    ? cmath.inf          ? -cmath.inf         ?
?????????????????????????????????????????????????????????????????????
? numpy    ? numpy.nan    ? numpy.PINF         ? numpy.NINF         ?
?          ? numpy.NaN    ? numpy.inf          ? -numpy.inf         ?
?          ? numpy.NAN    ? numpy.infty        ? -numpy.infty       ?
?          ?              ? numpy.Inf          ? -numpy.Inf         ?
?          ?              ? numpy.Infinity     ? -numpy.Infinity    ?
?????????????????????????????????????????????????????????????????????
几个评论表:
float构造函数实际上是不区分大小写的,所以你也可以使用float("NaN")或float("InFiNiTy").cmath和numpy常量返回普通的Python float对象.numpy.NINF实际上是我所知道的唯一不需要的常数-.可以使用complex和创建复杂的NaN和Infinity cmath:
????????????????????????????????????????????????????????????????????????????????????????????
?   result ? NaN+0j         ? 0+NaNj          ? Inf+0j              ? 0+Infj               ?
? module   ?                ?                 ?                     ?                      ?
????????????????????????????????????????????????????????????????????????????????????????????
? built-in ? complex("nan") ? complex("nanj") ? complex("inf")      ? complex("infj")      ?
?          ?                ?                 ? complex("infinity") ? complex("infinityj") ?
????????????????????????????????????????????????????????????????????????????????????????????
? cmath    ? cmath.nan ¹    ? cmath.nanj      ? cmath.inf ¹         ? cmath.infj           ?
????????????????????????????????????????????????????????????????????????????????????????????
是否有任何功能来检查数字是否是无穷大?
是的 - 事实上,NaN,Infinity以及Nan和Inf都有几个功能.但是,这些预定义的函数不是内置的,它们总是需要float:
????????????????????????????????????????????????????????????????
?      for ? NaN         ? Infinity or    ? not NaN and        ?
?          ?             ? -Infinity      ? not Infinity and   ?
? module   ?             ?                ? not -Infinity      ?
????????????????????????????????????????????????????????????????
? math     ? math.isnan  ? math.isinf     ? math.isfinite      ?
????????????????????????????????????????????????????????????????
? cmath    ? cmath.isnan ? cmath.isinf    ? cmath.isfinite     ?
????????????????????????????????????????????????????????????????
? numpy    ? numpy.isnan ? numpy.isinf    ? numpy.isfinite     ?
????????????????????????????????????????????????????????????????
再说几句话:
complex和import功能也工作了复杂的对象,他们会检查是否真实或虚部是NAN或无穷.cmath函数也适用于numpy数组和可以转换为一个的所有东西(如列表,元组等)numpy和numpy.numpy.isposinf(但不是唯一的NaN,它也匹配numpy.isneginf和NaN)即使没有内置函数,也很容易自己创建它们(我忽略了类型检查和文档):
def isnan(value):
    return value != value  # NaN is not equal to anything, not even itself
infinity = float("infinity")
def isinf(value):
    return abs(value) == infinity 
def isfinite(value):
    return not (isnan(value) or isinf(value))
总结这些函数的预期结果(假设输入是浮点数):
????????????????????????????????????????????????????????????????????????
?          input ? NaN   ? Infinity   ? -Infinity   ? something else   ?
? function       ?       ?            ?             ?                  ?
????????????????????????????????????????????????????????????????????????
? isnan          ? True  ? False      ? False       ? False            ?
????????????????????????????????????????????????????????????????????????
? isinf          ? False ? True       ? True        ? False            ?
????????????????????????????????????????????????????????????????????????
? isfinite       ? False ? False      ? False       ? True             ?
????????????????????????????????????????????????????????????????????????
是否可以在Python中将数组元素设置为NaN?
在列表中没有问题,你可以在那里包含NaN(或Infinity):
>>> [math.nan, math.inf, -math.inf, 1]  # python list
[nan, inf, -inf, 1]
但是如果你想要将其包含在pandas.isna(例如pandas.isnull或None),则数组的类型必须是NaT或array,否则它会尝试将其向下到阵列的类型!
>>> import numpy as np
>>> float_numpy_array = np.array([0., 0., 0.], dtype=float)
>>> float_numpy_array[0] = float("nan")
>>> float_numpy_array
array([nan,  0.,  0.])
>>> import array
>>> float_array = array.array('d', [0, 0, 0])
>>> float_array[0] = float("nan")
>>> float_array
array('d', [nan, 0.0, 0.0])
>>> integer_numpy_array = np.array([0, 0, 0], dtype=int)
>>> integer_numpy_array[0] = float("nan")
ValueError: cannot convert float NaN to integer