用布尔ndarray掩盖ndarray来替换nans

问题描述 投票:0回答:1

我正在尝试使用布尔掩码来处理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设置为均值。

python numpy nan masked-array
1个回答
1
投票

使用numpy.nanmean执行以下操作:它将忽略NaNs

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。

返回数组元素的平均值。默认情况下,平均值取自平坦数组,否则超过指定轴。 float64中间值和返回值用于整数输入。

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

© www.soinside.com 2019 - 2024. All rights reserved.