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
我在 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