拖尾处理相当于把数据(尾)捏成尾,然后按照一定的方法把捏好的数据填充进去。下面这篇文章主要介绍了Python中Winsorize尾部处理应用的相关信息,有需要的可以参考一下。
最近做数据的时候,发现数据填在了原来空值或者无效值被截断的地方。在传统的研究中,先剔除空值,再进行截断,但有些不需要剔除空值的数据集需要剔除极值,所以截断不能省略。根据自己的操作经验做一些记录:
以保存在Excel中的数据为例:
从scipy.stats.mstats导入winsorize
进口熊猫作为pd
df=pd.read_excel('Excel.xlsx ',engine='openpyxl ',header=0)
Df_list=['a ',' b ',' c']#要截断的列的名称
1:直接应用Winsorize,不考虑空值和无效值,缩尾结果可能导致部分空值被填充数据
对于df_list()中的I:
Df [i]=Winsorize (df [i],limits=[0.01,0.01]) # 1%和99% winsorize指定列中的连续数据。
2.1:屏蔽空值和无效值,仅对其他值进行Winsorize处理,缩尾结果不改变原来的空值和无效值
对于df_list()中的I:
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),如果条件为x,否则为y
#这里判断是否为null,如果是,则为null,否则将被截断1%和99%以屏蔽null和无效值。
2.2:winsorize提供的参数,但这个方法我没有成功…仅供参考
对于df_list()中的I:
df[i]=winsorize(df[i],limits=[0.01,0.01],nan_policy='omit ')
3:屏蔽空值和无效值,对所有值进行Winsorize处理。截断的结果不会改变原始的空值和无效值与方法2的区别在于方法3没有改变需要缩尾的数据长度。
对于df_list()中的I:
mask=df[i]。诺特娜()
df.loc[mask,i]=winsorize(df[i])。loc[mask],limits=[0.01,0.01])
#此掩码是一个布尔索引,指示哪些位置是nan。
#例如,一列数据是[1,NaN,2]。如果用df['A']。isnan(),你将得到一个[False,True,False]的数组
#这个数组就是所谓的mask,可以挑出dataframe中的特定数据。
遇到了后续描述性统计有负无穷大值的问题,就用null值代替了。
#如果您需要将一个无限值更改为空值
df=df.replace(-np。Inf,np。南)
(在此感谢张老师、李老师、孙老师不厌其烦的为我提供参考!)
参考文章:
1.1的正确方法。Python中Winsorize但忽略nan
2.关于numpy.ma.masked_invalid的用法
3.Python数据分析-尾部收缩处理
总结
关于Winsorize在Python中的应用的这篇文章就到这里了。更多关于Winsorize在Python中的应用,请搜索我们之前的文章或者继续浏览下面的相关文章。希望大家以后能多多支持我们!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。