用布尔ndarray掩盖ndarray来替换nans

时间:2017-04-30 10:19:11

标签: python numpy nan masked-array

我正在尝试使用布尔掩码来处理numpy数组中的行:

isnan = np.isnan(self.X[:, AGE_COLUMN].astype(float))
self.X[isnan, AGE_COLUMN] = np.mean(self.X[:, AGE_COLUMN].astype(float))

isnan和X是dtype

首先,我检查年龄栏中的哪些行是na​​n。然后我想将这些值设置为所有年龄段的平均值。调试器具有self.X[isnan, AGE_COLUMN]的以下结果:

[nan nan nan nan nan nan nan nan nan nan ....]

例如,如果我尝试self.X[[True, False, True], AGE_COLUMN],则返回索引行。但是使用isnan数组它不起作用。

如何解决这个问题,将nans设置为平均值。

1 个答案:

答案 0 :(得分:1)

使用numpy.nanmean执行以下操作:忽略 NaN

self.X[isnan, AGE_COLUMN] = np.nanmean(self.X[:, AGE_COLUMN].astype(float))

From the documentation

  

numpy.nanmean(a,axis = None,dtype = None,out = None,keepdims =)

     

计算沿指定轴的算术平均值,   无视NaN。

     

返回数组元素的平均值。平均值被接管   默认情况下为flattened数组,否则超出指定的轴。   float64中间值和返回值用于整数输入。

     

对于所有NaN切片,返回NaN并引发RuntimeWarning。