1. 本际云推荐 - 专业推荐VPS、服务器,IDC点评首页
  2. 云主机运维
  3. VPS运维

Python中运用Winsorize缩尾解决操作工作经验

Python中应用Winsorize缩尾处理方法介绍

作为数据处理领域中常见的数据插补技术,缩尾解决等同于对信息进行掐头(尾)去尾,之后再依照相应的方式弥补被剪掉相关数据。本文主要介绍Python中运用Winsorize缩尾解决的资料。

Python中运用Winsorize缩尾解决操作工作经验

实现方法

在处理Excel表格数据时,可以采用以下方法:

  1. 直接应用Winsorize,不考虑空值和无效值,缩尾结果可能导致部分空值被填充数据。
  2. 屏蔽空值和无效值,仅对其他值进行Winsorize处理,缩尾结果不改变原来的空值和无效值。
  3. 屏蔽空值和无效值,对所有值进行Winsorize处理,缩尾结果不改变原来的空值和无效值,与方法2的区别在于方法3没有改变需要缩尾的数据长度。

对应的具体代码实现如下:

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处理
import numpy as np
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处理
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)

以上为Python中应用Winsorize缩尾处理的实现方法,希望可以对需要进行数据插补的小伙伴们提供一定的帮助。

原创文章,作者:小编小本本,如若转载,请注明出处:https://www.benjiyun.com/yunzhujiyunwei/vps-yunwei/6942.html