二维数组异常值替换均值

问题遇到的现象和发生背景

在写二维数组异常值替换代码中,遇到一个问题,如何将数组中的异常值使用该列的均值进行替换,需要逐列进行。异常值判断已找到了解决办法。目前查阅文献资料,发现都是针对一维数组或list进行的操作,没有对二维数组的这类操作(异常值替换为均值)。

用代码块功能插入代码,请勿粘贴截图

mean = np.mean(data_array, axis=1)
std = np.std(data_array, axis=1)

floor = mean - 3std
upper = mean + 3
std

for i, val in enumerate(data_array): #这个代码是对一维数组的操作,对二维数组如何修改?
data_array[i] = float(np.where(((valupper)), mean, val)) #这个代码是对一维数组的操作,对二维数组如何修改?

运行结果及报错内容

ValueError: operands could not be broadcast together with shapes (4,) (3,)

我的解答思路和尝试过的方法

按列求均值和标准差,对异常值(偏离3倍标准差)使用该列均值替换。使用上述代码进行运算,但没有通过。

我想要达到的结果

修改优化代码或给出更好的解决方案,最终达到异常值由该列均值替代。代码要通用的。谢谢!

不知道下面代码能否满足你的要求

import numpy as np
data = np.array([[1,1000,3],[3,20000,5],[4,5,6]])
# 以列为基础求每一列的均值与标准差
mean_value = np.mean(data, axis=0)
std_value = np.std(data, axis=0)

floor = mean_value - 3*std_value
upper = mean_value + 3*std_value

columns = data.shape[1]
rows = data.shape[0]
# 遍历每一列
for col in range(columns):
    column = data[:,col]
    for row, val in enumerate(column):
        # 用该列均值替换异常值
        if val < floor[col] or val > upper[col]:
            data[row,col] = mean_value[col]
print(data)