winsorize 不影响异常值

winsorize does not affect the outlier

我在 DataFrame 中有这组数据:

data winsor_data
0 1660 1660
1 600 600
2 50 50
3 3173.55 3173.55
4 30 30
5 120 120
6 7.84 7.84
7 1660 1660
8 33.3 33.3
9 2069.49 2069.49
10 42 42
11 384.29 384.29
12 1660 1660
13 1338.57 1338.57
14 200000 200000
15 1760 1760

第 14 个值显然是异常值。

    from scipy.stats.mstats import winsorize

    dfdailyIncome['winsor_data'] = winsorize(df['data'], limits=(0,0.95))

我不明白为什么不裁剪离群值。可能与分位数的计算方式有关。

我认为您误解了 'limits' 参数。 如果您想削减 10% 的最大值,您需要:

dfdailyIncome['winsor_data'] = winsorize(df['data'], limits=[0,0.1])

您在示例中削减了 95% 的最大数据。

提示:即使您使用 winsorize(df['data'], limits=[0,0.05]),您的数据也会保持不变,因为您的最大数据中有 5% 是原始数据,因为您的值少于 20 个。

请参阅此处的示例以获取更多说明:scipy.stats.mstats.winsorize