from sklearn import datasetsimport pandas as pdimport numpy as npdt = datasets.load_diabetes()data = pd.DataFrame(data= np.c_[dt['data'], dt['target']],columns= dt['feature_names'] + ['target'] )data = data.drop('sex', axis = 1)# 均值加减2倍标准差# 计算变量异常值的函数def out1(x): mu = np.average(x) sigma = np.std(x) LL = mu - 2*sigma # 下限 UL = mu + 2*sigma # 上限 out = [1 if (a >= UL) | (a <= LL) else 0 for a in x] return(out)# 检查每个变量中的异常值print(data.apply(out1).apply(sum))# 用下限/上限替换异常值的函数def out_impute(x): mu = np.average(x) sigma = np.std(x) LL = mu - 2*sigma # 下限 UL = mu + 2*sigma # 上限 xnew = "Enter Code Here" return(xnew)data1 = data.apply(out_impute) # 创建包含替换值的新数据
请问有人可以帮助我如何用下限和上限替换异常值吗?
我将异常值定义为 >= mu + 2*sigma 和 <= mu – 2*sigma。我在代码中定义了一个名为’out_impute’的函数,但在替换部分卡住了。
提前感谢!
回答:
使用 df.clip
LL = mu - 2*sigma # 下限 UL = mu + 2*sigma # 上限df['data'].clip(LL, UL)