溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python中resample函數(shù)實現(xiàn)重采樣和降采樣代碼

發(fā)布時間:2020-10-21 03:50:40 來源:腳本之家 閱讀:290 作者:sorrythanku 欄目:開發(fā)技術(shù)

函數(shù)原型

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下面會隨著兩個用法說明

降采樣

對時間數(shù)據(jù)細粒度增大,可以把每天的數(shù)據(jù)聚合成一周,可以求和或者均值的方式進行聚合

下面給出列子

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個區(qū)間[1,8),[8,15),[15,22),[22-29),[29-5(下個月)),每個區(qū)間的值就為單個區(qū)間值之和。由于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,區(qū)間就變成了左開右閉,那么如果從區(qū)間還是(1,8],1就取不到,所以往前取,就是(25,1],(1,8],(8,15],(15,22],(22,29],(29,5]這6個區(qū)間

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等于右區(qū)間的值,如果label=left就是指label等于左區(qū)間的值

重采樣

降低時間的細粒度,對于重采樣,主要是涉及到值的填充。有下面的三種填充方法

不填充。那么對應無值的地方,用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

總結(jié)

重采樣和降采樣一般用在時間序列里面,合理的使用降低時間維度或者降低時間細粒度多可以成為好的特征。

以上這篇python中resample函數(shù)實現(xiàn)重采樣和降采樣代碼就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持億速云。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI