Pandas 将缺失值和异常值作为中位数进行插补,中位数计算中不包括异常值 计算缺失值和极值的中位数,中位数计算中不包括这些极值。
我想用中位数进行估算。我想计算中位数,不包括极端值。然后我想把这些极端值作为中间值 我有这样一个数据帧:Pandas 将缺失值和异常值作为中位数进行插补,中位数计算中不包括异常值 计算缺失值和极值的中位数,中位数计算中不包括这些极值。,pandas,scikit-learn,data-cleaning,Pandas,Scikit Learn,Data Cleaning,我想用中位数进行估算。我想计算中位数,不包括极端值。然后我想把这些极端值作为中间值 我有这样一个数据帧: df = pd.DataFrame({"AAA":[100,NaN,0.0,0.1,4.6]}) AAA 0 100 1 NaN 2 0.0 3 0.1 4 4.6 我想将观察指数=0定义为一个异常值,因此,将其从插补计算中排除,并插补其值 AAA impute 0 100 True 1 NaN True 2 0.0 False 3 0.1
df = pd.DataFrame({"AAA":[100,NaN,0.0,0.1,4.6]})
AAA
0 100
1 NaN
2 0.0
3 0.1
4 4.6
我想将观察指数=0
定义为一个异常值,因此,将其从插补计算中排除,并插补其值
AAA impute
0 100 True
1 NaN True
2 0.0 False
3 0.1 False
4 4.6 False
然后,我想在新的AAA
列中为NAN估算值
AAA impute AAA_
0 100 True NaN
1 NaN True NaN
2 0.0 False 0.0
3 0.1 False 0.1
4 4.6 False 4.6
因此,我需要如下所示的数据帧:
AAA impute AAA_
0 100 True 0.1
1 NaN True 0.1
2 0.0 False 0.0
3 0.1 False 0.1
4 4.6 False 4.6
1. 将观察指标=0
定义为异常值,因此将其排除在外。
我们首先将df[“AAA”]
中的异常值计算为单独的布尔数组(长度与原始序列相同)
这将以数据帧的形式返回以下结果
df["impute"] = impute
AAA impute
0 100 True
1 NaN True
2 0.0 False
3 0.1 False
4 4.6 False
2.仅使用有效值创建特征向量
然后为我们将用于插补的值创建一个新的特征向量。这是AAA
的子集,取决于它是否标记为异常值或缺失
AAA_=np.where(~impute, x.AAA, np.nan)
df["AAA_"] = AAA_
AAA impute AAA_
0 100 True NaN
1 NaN True NaN
2 0.0 False 0.0
3 0.1 False 0.1
4 4.6 False 4.6
3.估算价值
然后,您可以使用scikit learn的预处理.Imputer
输入值
median_imputer = preprocessing.Imputer(strategy="median", axis=0)
AAA_complete = median_imputer.fit_transform(AAA_.reshape(-1, 1))
这将返回答案:
df["AAA"] = AAA_complete
AAA impute AAA_
0 100 True 0.1
1 NaN True 0.1
2 0.0 False 0.0
3 0.1 False 0.1
4 4.6 False 4.6
注意:我知道中值在极端值面前是稳健的,但我希望这些值也能被转换。通过改变一行,可以很容易地将其更改为平均值<代码>中值\插补器=预处理。插补器(strategy=“median”,axis=0)至平均值\插补器=预处理。插补器(strategy=“mean”,axis=0)
df["AAA"] = AAA_complete
AAA impute AAA_
0 100 True 0.1
1 NaN True 0.1
2 0.0 False 0.0
3 0.1 False 0.1
4 4.6 False 4.6