您现在的位置是:网站首页> 编程资料编程资料
Python中应用Winsorize缩尾处理的操作经验_python_
2023-05-26
357人已围观
简介 Python中应用Winsorize缩尾处理的操作经验_python_
最近搞数据时发现,缩尾时本来是空值或者无效值的地方被填补了数据。传统的研究会将空值剔除后再进行缩尾,但一些不需要剔除空值的数据集需要剔除极端值,因而不能省略缩尾。结合自己的操作经验做些记录:
以保存在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的用法
总结
到此这篇关于Python中应用Winsorize缩尾处理的文章就介绍到这了,更多相关Python应用Winsorize缩尾内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
相关内容
- Python实现提取图片中颜色并绘制成可视化图表_python_
- python文件读取read及readlines两种方法使用详解_python_
- Python快速从视频中提取视频帧的方法详解_python_
- python matplotlib画图时坐标轴重叠显示不全和图片保存时不完整的问题解决_python_
- Python 任务自动化工具nox 的配置与 API详情_python_
- Python脚本提取fasta文件单序列信息实现_python_
- Python利用VideoCapture读取视频或摄像头并进行保存_python_
- Python中线程threading.Thread的使用详解_python_
- python合并RepeatMasker预测结果中染色体的overlap区域_python_
- Python一阶马尔科夫链生成随机DNA序列实现示例_python_
