使用标准偏差和平均公式丢弃异常值

时间:2018-05-17 09:34:43

标签: python pandas mean outliers standard-deviation

大家好,

我正在尝试从我的数据集中删除异常值。我使用mean-3 * std和mean + 3 * std定义了异常值边界。现在我想删除小于mean-3 * std的值并删除大于mean + 3 * std的值。你能帮我写一个这个公式吗?我是python的初学者。我已经看过类似的问题,但到目前为止这没有帮助。

直到现在我还有以下内容:

import pandas as pd

print(df_OmanAirTO.mean()-3*df_OmanAirTO.std(), df_OmanAirTO.mean()+3*df_OmanAirTO.std())

导致:

FuelFlow                2490.145718
ThrustDerateSmoothed       8.522145
CoreSpeed                 93.945180
EGTHotDayMargin            9.950557
EGT                      684.168701
TotalAirTemperature       11.980698
ThrustDerate              -3.780215

dtype: float64 

FuelFlow                4761.600157
ThrustDerateSmoothed      29.439075
CoreSpeed                101.360974
EGTHotDayMargin           90.414781
EGT                      915.952163
TotalAirTemperature       43.266653
ThrustDerate              44.672861

dtype: float64

现在我要删除小于mean-3 * std的值,并删除大于mean + 3 * std的值。我怎么能这样做?

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

我假设您要在每列上应用离群值条件(即在列FuelFlow中,删除小于2490.145718且大于4761.600157的单元格,以及列ThrustDerateSmoothed },删除小于8.522145且大于29.439075等的单元格,等等...)

我会试试这个:

filt_outliers_df_oman = df.apply(lambda x: x[(x < df_OmanAir[x.name].mean()-3*df_OmanAir[x.name].std()) & 
                                             (x > df_OmanAIr[x.name].mean()+3*df_OmanAir[x.name].std())], axis=0)