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


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缩尾处理的心得】相关推荐

  1. python缩写词_扩展Python中的英语缩略词

    我把wikipedia的扩展页面压缩成python字典(见下文) 请注意,如您所料,在查询字典时,您一定要使用双引号: 另外,我在维基百科页面中留下了多个选项.你可以随意修改它.注意,对右展开的消歧将 ...

  2. 缩尾处理(winsorize)-数据分析、数据处理

    文章目录 原理浅析 一个例子说清楚怎么用Python实现 一个正态分布缩尾处理的例子 see also 原理浅析 和经常听到的"去掉一个最低分去掉一个最高分"操作类似,缩尾处理相当 ...

  3. Stata安装外部命令——以Winsor2缩尾命令为例

    说明 计量经济学中经常要对数据进行缩尾处理,winsor是Stata中常用的缩尾命令,需要安装才能调用. 安装winsor2 方法一:ssc install winsor2 方法二:findit wi ...

  4. python中tensor与variable_NLP实战篇之tf2中tensor、variable、gradient、ops

    本文是基于tensorflow2.2.0版本,介绍了tf中变量.张量的概念,tf中梯度的计算方式和tensor相关的操作. 实战系列篇章中主要会分享,解决实际问题时的过程.遇到的问题或者使用的工具等等 ...

  5. python中列表和集合_15个例子掌握Python列表,集合和元组

    Python中的一切都是对象.每个对象都有自己的数据属性和与之关联的方法.为了有效和恰当地使用一个对象,我们应该知道如何与它们交互. 列表.元组和集合是三种重要的对象类型.它们的共同点是它们都被用作数 ...

  6. 教你在Python中实现潜在语义分析(附代码)

    作者:PRATEEK JOSHI 翻译:李润嘉 校对:万文菁 本文约3400字,建议阅读15分钟. 本文将通过拆解LSA的原理及代码实例来讲解如何运用LSA进行潜在语义分析. 介绍 你有没有去过那种运 ...

  7. 第五章 python中正则表达式的使用

    第一节    正则表达式的一些介绍 1)掌握正则表达式的案例 2)写一个小爬虫 3)正则表达式(或RE)是一个小型的.高度专业化的编程语言,(在python中)它内嵌在python中,并通过re模块实 ...

  8. 链表list(链式存储结构实现)_VOL.2 如何在python中实现链式存储结构

    一.前言 链式存储作为一种重要的数据存储方式有着极强的数据组织能力.灵活型和动态性,在众多数据结构中应用非常广泛.所谓链式存储结构,就是采用分散的存储空间分别存储每一组数据再通过地址链接的形式将全部数 ...

  9. python中标识符下划线用作开头_python python中那些双下划线开头的那些函数都是干啥用用的...

    1.写在前面 今天遇到了__slots__,,所以我就想了解下python中那些双下划线开头的那些函数都是干啥用用的,翻到了下面这篇博客,看着很全面,我只了解其中的一部分,还不敢乱下定义. 其实如果足 ...

最新文章

  1. R绘制边缘直方图、箱图(Marginal Histogram / Boxplot)
  2. 研究微信即时通讯的服务端、朋友圈、红包、推送等方案
  3. 【2016 Asia China-Final D题】
  4. redis订阅执行一段时间自动停止_面试系列 redis 分布式锁amp;数据一致性
  5. 学校为什么要单位接收函_学校为什么要做校园文化建设?
  6. python 持续集成工具_持续集成工具: Jenkins学习
  7. [css] 使用css实现蒙版的效果
  8. Unix下5种I/O模型
  9. goroutine与panic不得不说的故事
  10. Ubuntu解压文件的方法
  11. 语义分割-ICCV2017 Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks循环一致对抗网
  12. JDY-24M 超级 BLE 蓝牙模块——理解与实践
  13. 《Java从入门到放弃》JavaSE入门篇:面向对象概念(入门版)
  14. iOS面试题系列之常见算法
  15. 微信小程序测试点分类和总结
  16. 360导航源码php,51zxw 仿360网址导航源码
  17. package-lock和package-shrinkwrap
  18. html5中背景图片的大小怎么调,css中怎么改变背景图片大小?
  19. 如何创建WordPress登陆页面模板
  20. java中year与week year

热门文章

  1. 基于TI CC254X+iBeacon的室内定位解决方案
  2. Android ReplacementSpan 文字对齐问题
  3. 2021年P气瓶充装考试报名及P气瓶充装复审考试
  4. anaconda prompt、labelimg安装使用
  5. 手游交易平台四大难言之隐下,交易猫能否蜕变为“大老虎”
  6. html5调用摄像头实例
  7. vslam rgbd + lidar
  8. swf文件加密基础(转)
  9. 打印任意尺寸图片的方法
  10. 显卡类型: 集成显卡 独立显卡 核芯显卡有什么区别