在Python中将int数组的值更改为NaN(ValueError)

时间:2020-07-01 08:03:19

标签: python numpy nan

如果我尝试:

ints = np.arange(10)
ints[0] = np.nan

我收到以下错误:

Error:
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: cannot convert float NaN to integer

这里有解决方法吗? 我到目前为止的解决方案是像这样将数组转换为dtype = float:

casted = np.array(ints,dtype=float)
casted[0] = np.nan #  no errors 

2 个答案:

答案 0 :(得分:1)

我不知道您的实际问题是什么,但是有一个类似的问题,如果该值是“错误测量”,我想将值设置为NaN。相反,我要做的是生成一个“正确索引”列表,其中所有非错误元素都用各自的索引指示:

# A sensor could measure distance and angle
non_error = np.where(distance != 4294967295) # 4294967295 indicates an error
non_error_angle = angle[non_error]
non_error_distance = distance[non_error]

在实际的实现中,我有多个数据数组,每个数据数组都具有相同的错误索引,因此可以使用non_error列表来查找所有数组中的非错误元素,而不会冒犯错误的风险。数据的顺序,因为它们与索引相对应。

答案 1 :(得分:1)

import pandas as pd
import numpy as np

如果需要NAN数组,则:

array = np.empty(3)
array[:] = np.NaN

或者如果您需要更改给定值,则:

ints = np.arange(10).astype(float)
ints[0]=np.NAN
pdintseries=pd.Series(int).astype(dtype='Int64') #pandas has released support for nan containing Int64 dtypes.

na support pd series

您可以进一步将系列转换为numpy对象。

或直接:

int=np.arange(10).astype(object)
int[0]=np.NAN

不是专门解决您的问题,而是一些解决方法。