当前位置:  开发笔记 > 编程语言 > 正文

用Pandas数据帧中的列分位数替换异常值

如何解决《用Pandas数据帧中的列分位数替换异常值》经验,为你挑选了1个好方法。

我有一个数据帧:

df = pd.DataFrame(np.random.randint(0,100,size=(5, 2)), columns=list('AB'))
    A   B
0  92  65
1  61  97
2  17  39
3  70  47
4  56   6

这是5%的分位数:

down_quantiles = df.quantile(0.05)
A    24.8
B    12.6

这里是低于分位数的值的掩码:

outliers_low = (df < down_quantiles)
       A      B
0  False  False
1  False  False
2   True  False
3  False  False
4  False   True

我想将df低于分位数的值设置为其列分位数.我可以这样做:

df[outliers_low] = np.nan
df.fillna(down_quantiles, inplace=True)

    A   B
0  92.0  65.0
1  61.0  97.0
2  24.8  39.0
3  70.0  47.0
4  56.0  12.6

但肯定应该有一种更优雅的方式.我怎么能不这样做fillna?谢谢.



1> Nickil Mavel..:

你可以使用DF.mask()方法.只要存在True实例,其他系列的值就会根据匹配的列名通过提供而被替换axis=1.

df.mask(outliers_low, down_quantiles, axis=1)  

在此输入图像描述


另一种变体是在使用DF.where()波浪号(~)符号反转布尔掩码后使用方法.

df.where(~outliers_low, down_quantiles, axis=1)

在此输入图像描述

推荐阅读
郑谊099_448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有