python实现采样函数_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-01 1

2018-01-02 2

2018-01-03 3

2018-01-04 4

2018-01-05 5

2018-01-06 6

2018-01-07 7

2018-01-08 8

2018-01-09 9

2018-01-10 10

2018-01-11 11

2018-01-12 12

2018-01-13 13

2018-01-14 14

2018-01-15 15

2018-01-16 16

2018-01-17 17

2018-01-18 18

2018-01-19 19

2018-01-20 20

2018-01-21 21

2018-01-22 22

2018-01-23 23

2018-01-24 24

2018-01-25 25

2018-01-26 26

2018-01-27 27

2018-01-28 28

2018-01-29 29

2018-01-30 30

Freq: D, dtype: int32

ts_7d=ts.resample('7D').sum()

ts_7d

2018-01-01 28

2018-01-08 77

2018-01-15 126

2018-01-22 175

2018-01-29 59

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-25 1

2018-01-01 35

2018-01-08 84

2018-01-15 133

2018-01-22 182

2018-01-29 30

上面的代码,将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-01 1

2018-01-08 35

2018-01-15 84

2018-01-22 133

2018-01-29 182

2018-02-05 30

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-01 00:00:00 1.0

2018-01-01 07:00:00 NaN

2018-01-01 14:00:00 NaN

2018-01-01 21:00:00 NaN

Freq: 7H, dtype: float64

2018-01-01 00:00:00 1

2018-01-01 07:00:00 1

2018-01-01 14:00:00 1

2018-01-01 21:00:00 1

Freq: 7H, dtype: int32

Out[24]:

2018-01-01 00:00:00 1

2018-01-01 07:00:00 2

2018-01-01 14:00:00 2

2018-01-01 21:00:00 2

Freq: 7H, dtype: int32

总结

重采样和降采样一般用在时间序列里面,合理的使用降低时间维度或者降低时间细粒度多可以成为好的特征。

以上这篇python中resample函数实现重采样和降采样代码就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持菜鸟教程www.piaodoo.com。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值