如何用NAN值替换每列中的不同值?

时间:2020-08-11 14:36:30

标签: python arrays numpy

如果有人知道更好的方法来进行以下操作,请告诉我。 我正在尝试替换numpy数组中的某些值。 每列中的替换条件均不同。 假设我有一个numpy数组和nodata值列表,例如:

import numpy as np
array = np.array([[ 1, 2, 3],
                  [ 4, 5, 6],
                  [ 7, 8, 9],
                  [10,11,12]])
nodata_values = [4, 8, 3]

我想拥有的是一个数组,其值被替换为

array([[ 1.,  2., nan],
       [nan,  5.,  6.],
       [ 7., nan,  9.],
       [10., 11., 12.]])

我知道我可以做到:

np.array([np.where(i == nodata_values[idx], np.nan, i) 
          for idx, i in enumerate(array.T)]).T

但是此代码在内部使用for循环,因此将其应用于具有上万行的表将花费时间。

1 个答案:

答案 0 :(得分:1)

使用np.isin创建布尔索引和广播。

astype避免使用ValueError: cannot convert float NaN to integer

import numpy as np

array = array.astype(np.float)

array[np.isin(array , nodata_values)] = np.NaN

[[ 1.  2. nan]
 [nan  5.  6.]
 [ 7. nan  9.]
 [10. 11. 12.]]