首页 > 解决方案 > 使用标准差和均值公式删除异常值

问题描述


大家好,

我正在尝试从我的数据集中删除异常值。我使用 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 的值。我怎样才能做到这一点?

预先感谢您帮助我!

标签: pythonpandasmeanoutliersstandard-deviation

解决方案


我假设您想在每列上应用异常值条件(即在 column 中FuelFlow,删除小于2490.145718和大于的单元格4761.600157,在 column 中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)

推荐阅读