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