Python 如何用NAN值替换每列中的不同值?
请让我知道,如果有人知道一个更好的方法来做以下。 我正在尝试替换numpy数组中的一些值。 每列中的替换条件不同。 假设我有一个numpy数组和nodata值列表,如:Python 如何用NAN值替换每列中的不同值?,python,arrays,numpy,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]
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-loop-inside,因此将其应用于具有上万行的表将需要时间。用于创建布尔索引和广播
为避免ValueError:无法将浮点NaN转换为整数
import numpy as np
array = array.astype(np.float)
array[np.isin(array , nodata_values)] = np.NaN
nan
是浮点值,因此只有当dtype
是浮点类型时,数组才能包含它。这是否回答了您的问题@KarlKnechtel,谢谢你的评论,我知道这一点,我不介意浮动格式。因为我想要np.nan值。mask=(数组==4)| |(数组==8)| |(数组==3);array[mask]=np.nan
@jakub,我希望替换条件的每一列都有不同的值。
[[ 1. 2. nan]
[nan 5. 6.]
[ 7. nan 9.]
[10. 11. 12.]]