首页 > 解决方案 > 为什么 numpy 在我实际尝试转换 int 时告诉我无法转换 float NaN?

问题描述

这是一个简单的numpy数组:

import numpy as np
x = np.array([15, 22, 3])

我想将第二个值转换为 nan:

x[1] = np.nan

它返回以下错误:

ValueError: cannot convert float NaN to integer

print(type(x[1]))  # this returns "<class 'numpy.int32'>"

我设法通过将整数数组转换为浮点数组来用 NaN 替换所需的值。

但还是。为什么当我实际尝试转换int时numpy 告诉我无法转换float NaN

谢谢

标签: pythonnumpy

解决方案


numpy,nan是一个特殊的float:

>>> type(np.nan)
<class 'float'>

我称它为一种特殊类型的浮点数,因为如果您尝试将两者都添加到单个 numpy 数组中,通常 Python 不会抱怨,int因为float整数将自动转换为float

>>> x = np.array([-1, float(10.12)])
>>> x
>> array([-1.  , 10.12])

但情况并非如此numpy.nan

非数字 (NaN) 的 IEEE 754 浮点表示。


我建议要么创建一个 numpy 浮点数组:

import numpy as np
x = np.array([15.0, 22.0, 3.0])
x[1] = np.nan

>>> array([15., nan,  3.])

或者如果您的用例允许这种表示,请尝试nan使用替代整数值表示。例如用于-1表示nan(例如,如果在您的用例中您没有负值,这将是有意义的)。


或者,您可以使用list允许您存储不同数据类型的对象:

l = [15, 22, 3]
l[1] = np.nan

>>> [15, nan, 3]

推荐阅读