Python中应用Winsorize缩尾处理的操作经验

 更新时间:2022年07月01日 09:39:53   作者:啥都不懂的鳄鱼  
缩尾处理相当于对数据进行掐头(尾)去尾,然后再按照一定的方法填补被掐掉的数据,下面这篇文章主要给给大家介绍了关于Python中应用Winsorize缩尾处理的相关资料,需要的朋友可以参考下

最近搞数据时发现,缩尾时本来是空值或者无效值的地方被填补了数据。传统的研究会将空值剔除后再进行缩尾,但一些不需要剔除空值的数据集需要剔除极端值,因而不能省略缩尾。结合自己的操作经验做些记录:

以保存在Excel中的数据为例:

from scipy.stats.mstats import winsorize
import pandas as pd
df = pd.read_excel('Excel.xlsx', engine='openpyxl', header=0)
df_list=["a","b","c"]#需要进行缩尾的列名

1:直接应用Winsorize,不考虑空值和无效值,缩尾结果可能导致部分空值被填充数据

for i in df_list():
    df[i]=winsorize(df[i],limits=[0.01, 0.01])#对指定列中的连续数据进行1%和99%的缩尾(Winsorize)处理

2.1:屏蔽空值和无效值,仅对其他值进行Winsorize处理,缩尾结果不改变原来的空值和无效值

for i in df_list():
    df[i]=np.where(df[i].isnull(), np.nan, winsorize(np.ma.masked_invalid(df[i]),limits=(0.01,0.01)))
#np.where(condition, x, y),满足condition是x,否则y
#此处判断是否空值,是的话为空,否的话进行屏蔽空值和无效值的1%和99%缩尾处理

2.2:winsorize提供的参数,但这个方法我没有成功…仅供参考

for i in df_list():
    df[i]=winsorize(df[i],limits=[0.01, 0.01], nan_policy='omit')

winsorize官方文档

3:屏蔽空值和无效值,对所有值进行Winsorize处理,缩尾结果不改变原来的空值和无效值,与方法2的区别在于方法3没有改变需要缩尾的数据长度

for i in df_list():
    mask = df[i].notna()
    df.loc[mask,i] = winsorize(df[i].loc[mask],limits=[0.01, 0.01]) 
    #这个mask就是一个bool index,指示哪些位置上是nan
    #比如一列数据是[1, NaN, 2],如果用df['A'].isnan()得到的就是一个[False, True, False]的数组 
    #这个数组就是所谓的mask,它可以把dataframe中的特定数据挑出来

我碰到后续描述性统计有负无穷值的问题,因而将其替换为空值

#如果需要将无穷值换为空值
df=df.replace(-np.Inf,np.NaN) 

(在此鸣谢不厌其烦给我提供参考的张老师、李老师、孙老师!)

参考文章:

1.Winsorize的正确方法但在Python中忽略nan

2.有关numpy.ma.masked_invalid的用法

3.Python数据分析 - 缩尾处理

总结

到此这篇关于Python中应用Winsorize缩尾处理的文章就介绍到这了,更多相关Python应用Winsorize缩尾内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • OpenCV实战之AI照片背景替换

    OpenCV实战之AI照片背景替换

    不少人在生活中都有抠人像图换背景的需求。本文将为大家介绍一个更快的方法,即利用OpenCV实现AI照片背景替换,感兴趣的小伙伴可以试一试
    2022-01-01
  • opencv python如何实现图像二值化

    opencv python如何实现图像二值化

    这篇文章主要介绍了opencv python如何实现图像二值化,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-02-02
  • Python Pickling 和 Unpickling 的区别

    Python Pickling 和 Unpickling 的区别

    Python中的Pickling和Unpickling是与数据序列化和反序列化相关的重要概念,本文主要介绍了Python Pickling和Unpickling的区别,具有一定的参考价值,感兴趣的可以了解一下
    2023-11-11
  • python chinesecalendar报错:"no available data for year {}, only year between [{}, {}] supported"

    python chinesecalendar报错:"no available data for ye

    这篇文章主要介绍了python chinesecalendar报错:“no available data for year {}, only year between [{}, {}] supported“的相关知识,需要的朋友可以参考下
    2023-03-03
  • 记一次Django响应超慢的解决过程

    记一次Django响应超慢的解决过程

    这篇文章主要介绍了记一次Django响应超慢的解决过程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • 公认8个效率最高的爬虫框架

    公认8个效率最高的爬虫框架

    在本篇文章里小编给大家整理的是关于2020年8个效率最高的爬虫框架知识点,需要的朋友们可以学习下。
    2020-07-07
  • python学习手册中的python多态示例代码

    python学习手册中的python多态示例代码

    多态是面向对象语言的一个基本特性,多态意味着变量并不知道引用的对象是什么,根据引用对象的不同表现不同的行为方式,下面使用一个示例学习他的使用方法
    2014-01-01
  • 深入探索Python解码神器Chardet自动检测文本编码

    深入探索Python解码神器Chardet自动检测文本编码

    Chardet,洞察编码的清晰水晶球,一个让你与编码不再“失联”的神器,本文带大家走近这个隐藏在Python工具箱中的小宝贝,探索它的秘密
    2024-01-01
  • Python搭建APNS苹果推送通知推送服务的相关模块使用指南

    Python搭建APNS苹果推送通知推送服务的相关模块使用指南

    这里总结了一份Python搭建苹果推送通知推送服务的相关模块使用指南,包括PyAPNs、基于twisted框架的pyapns以及apns-client三个模块的介绍,需要的朋友可以参考下
    2016-06-06
  • Python之打印日志库(logging)

    Python之打印日志库(logging)

    这篇文章主要介绍了Python之打印日志库(logging),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09

最新评论