将np.nan转换为numpy数组中的值

时间:2022-03-04 21:24:50
import numpy as np

a = np.array([1,2,3,4,5,6,7,8,9])
b = np.where (a==3,np.nan,a)
print (b) #OK, can convert certain values (e.g. 3) into np.nan

c = np.where (b==np.nan,3,b)

print (c)

But does not work! Could not convert np.nan into 3. How can I convert np.nan in the array c into the value 3? The result (array c) should be same as the original array a.

但是不起作用!无法将np.nan转换为3.如何将数组c中的np.nan转换为值3?结果(数组c)应与原始数组a相同。

2 个解决方案

#1


5  

c = np.where(np.isnan(b), 3, b)

#2


3  

Working with nan is a little tricky because nan != nan. You could use np.isnan and boolean indexing, though:

使用nan有点棘手,因为nan!= nan。您可以使用np.isnan和布尔索引,但是:

>>> a = np.arange(10.0)
>>> a
array([ 0.,  1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,  9.])
>>> a[a % 3 == 0] = np.nan
>>> a
array([ nan,   1.,   2.,  nan,   4.,   5.,  nan,   7.,   8.,  nan])
>>> a[np.isnan(a)] = 999
>>> a
array([ 999.,    1.,    2.,  999.,    4.,    5.,  999.,    7.,    8.,  999.])

#1


5  

c = np.where(np.isnan(b), 3, b)

#2


3  

Working with nan is a little tricky because nan != nan. You could use np.isnan and boolean indexing, though:

使用nan有点棘手,因为nan!= nan。您可以使用np.isnan和布尔索引,但是:

>>> a = np.arange(10.0)
>>> a
array([ 0.,  1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,  9.])
>>> a[a % 3 == 0] = np.nan
>>> a
array([ nan,   1.,   2.,  nan,   4.,   5.,  nan,   7.,   8.,  nan])
>>> a[np.isnan(a)] = 999
>>> a
array([ 999.,    1.,    2.,  999.,    4.,    5.,  999.,    7.,    8.,  999.])