python中resample函数实现重采样和降采样代码
函数原型
resample(self,rule,how=None,axis=0,fill_method=None,closed=None,label=None,convention=‘start',kind=None,loffset=None,limit=None,base=0,on=None,level=None)
比较关键的是rule,closed,label下面会随着两个用法说明
降采样
对时间数据细粒度增大,可以把每天的数据聚合成一周,可以求和或者均值的方式进行聚合
下面给出列子
times=pd.date_range('20180101',periods=30)
ts=pd.Series(np.arange(1,31),index=times)
ts
2018-01-011
2018-01-022
2018-01-033
2018-01-044
2018-01-055
2018-01-066
2018-01-077
2018-01-088
2018-01-099
2018-01-1010
2018-01-1111
2018-01-1212
2018-01-1313
2018-01-1414
2018-01-1515
2018-01-1616
2018-01-1717
2018-01-1818
2018-01-1919
2018-01-2020
2018-01-2121
2018-01-2222
2018-01-2323
2018-01-2424
2018-01-2525
2018-01-2626
2018-01-2727
2018-01-2828
2018-01-2929
2018-01-3030
Freq:D,dtype:int32
ts_7d=ts.resample('7D').sum()
ts_7d
2018-01-0128
2018-01-0877
2018-01-15126
2018-01-22175
2018-01-2959
dtype:int32
我们看看上面代码,就是先给出一个1-30号的series,l然后聚合成左闭右开的5个区间[1,8),[8,15),[15,22),[22-29),[29-5(下个月)),每个区间的值就为单个区间值之和。由于29号往后只有29号和30号有值,所以只有两个值
下面我们看看label和closed的功能
ts_7d=ts.resample('7D',closed='right',label='left').sum()
ts_7d
Out[14]:
2017-12-251
2018-01-0135
2018-01-0884
2018-01-15133
2018-01-22182
2018-01-2930
上面的代码,将closed改为了right,区间就变成了左开右闭,那么如果从区间还是(1,8],1就取不到,所以往前取,就是(25,1],(1,8],(8,15],(15,22],(22,29],(29,5]这6个区间
ts_7d=ts.resample('7D',closed='right',label='right').sum()
ts_7d
Out[15]:
2018-01-011
2018-01-0835
2018-01-1584
2018-01-22133
2018-01-29182
2018-02-0530
dtype:int32
上面的代码就可以看出label=right就是指label等于右区间的值,如果label=left就是指label等于左区间的值
重采样
降低时间的细粒度,对于重采样,主要是涉及到值的填充。有下面的三种填充方法
不填充。那么对应无值的地方,用NaN代替。对应的方法是asfreq。
用前值填充。用前面的值填充无值的地方。对应的方法是ffill或者pad。
用后值填充。对应的方法是bfill,b代表back。
下面给出代码看一下
ts_7h_asfreq=ts.resample('7H').asfreq()
print(ts_7h_asfreq)
ts_7h_ffill=ts.resample('7H').ffill()
print(ts_7h_ffill)
ts_7h_bfill=ts.resample('7H').bfill()
ts_7h_bfill
2018-01-0100:00:001.0
2018-01-0107:00:00NaN
2018-01-0114:00:00NaN
2018-01-0121:00:00NaN
Freq:7H,dtype:float64
2018-01-0100:00:001
2018-01-0107:00:001
2018-01-0114:00:001
2018-01-0121:00:001
Freq:7H,dtype:int32
Out[24]:
2018-01-0100:00:001
2018-01-0107:00:002
2018-01-0114:00:002
2018-01-0121:00:002
Freq:7H,dtype:int32
总结
重采样和降采样一般用在时间序列里面,合理的使用降低时间维度或者降低时间细粒度多可以成为好的特征。
以上这篇python中resample函数实现重采样和降采样代码就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。