用nan替换NumPy整数数组中的零

38
我写了以下Python脚本:
import numpy as np

arr = np.arange(6).reshape(2, 3)
arr[arr==0]=['nan']
print arr

但是我遇到了这个错误:

Traceback (most recent call last):
  File "C:\Users\Desktop\test.py", line 4, in <module>
    arr[arr==0]=['nan']
ValueError: invalid literal for long() with base 10: 'nan'
[Finished in 0.2s with exit code 1]

如何在NumPy数组中用nan替换零?

1
可能是Numpy-用NaN替换数字的重复问题。 - trblnc
2个回答

58

np.nan 的类型为 float:包含它的数组也必须具有这种数据类型(或complexobject 数据类型),因此在尝试分配此值之前,您可能需要将 arr 转换成浮点数类型。

错误是因为字符串值'nan'无法转换为整数类型以匹配arr的数据类型。

>>> arr = arr.astype('float')
>>> arr[arr == 0] = 'nan' # or use np.nan
>>> arr
array([[ nan,   1.,   2.],
       [  3.,   4.,   5.]])

1

整数数组无法保存NaN值,因此必须创建一个新副本;因此可以使用numpy.where在此处将满足条件的值替换为NaN:

arr = np.arange(6).reshape(2, 3)
arr = np.where(arr==0, np.nan, arr)

# array([[nan,  1.,  2.],
#        [ 3.,  4.,  5.]])

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接