在写二维数组异常值替换代码中,遇到一个问题,如何将数组中的异常值使用该列的均值进行替换,需要逐列进行。异常值判断已找到了解决办法。目前查阅文献资料,发现都是针对一维数组或list进行的操作,没有对二维数组的这类操作(异常值替换为均值)。
mean = np.mean(data_array, axis=1)
std = np.std(data_array, axis=1)
floor = mean - 3std
upper = mean + 3std
for i, val in enumerate(data_array): #这个代码是对一维数组的操作,对二维数组如何修改?
data_array[i] = float(np.where(((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)