最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Pandas時間序列重采樣(resample)方法中closed、label的作用詳解

 更新時間:2019年12月10日 15:38:54   作者:大聖Jonathan  
這篇文章主要介紹了Pandas時間序列重采樣(resample)方法中closed、label的作用詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

Pandas提供了便捷的方式對時間序列進行重采樣,根據時間粒度的變大或者變小分為降采樣和升采樣:

  • 降采樣:時間粒度變大。例如,原來是按天統(tǒng)計的數據,現在變成按周統(tǒng)計。降采樣會涉及到數據的聚合,比如天數據變成周數據,那么就得對一周的7天數據聚合,聚合的方式可以是求和,求均值等等。
  • 升采樣:時間粒度變小。例如,原來是按周統(tǒng)計的數據,現在變成按天統(tǒng)計。升采樣會涉及到數據的填充,根據填充的方法不同填充的數據也就不同。

下面涉及的例子,都需要導入numpy和pandas(如下),并且對于降采樣數據的聚合做簡單的求和處理。

import numpy as np
import pandas as pd

Pandas重采樣方法resample

在Pandas里,通過resample來處理重采樣,根據頻率的不同(freq)會處理成降采樣或者升采樣。我們先來看看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)
  Convenience method for frequency conversion and resampling of time
  series. Object must have a datetime-like index (DatetimeIndex,
  PeriodIndex, or TimedeltaIndex), or pass datetime-like values
  to the on or level keyword.
  
Parameters
----------
closed : {'right', 'left'}
    Which side of bin interval is closed. The default is ‘left' for all frequency offsets except for ‘M', ‘A', ‘Q', ‘BM', ‘BA', ‘BQ', and ‘W' which all have a default of ‘right'.
label : {'right', 'left'}
    Which bin edge label to label bucket with. The default is ‘left' for all frequency offsets except for ‘M', ‘A', ‘Q', ‘BM', ‘BA', ‘BQ', and ‘W' which all have a default of ‘right'.

第一眼看closed和label這兩個參數,會感覺云里霧里,即使看了例子也可能會覺得莫名奇妙。下面我們通過具體的降采樣和升采樣例子,來解讀一下這個兩個參數內含的玄機。

降采樣

首先先來創(chuàng)建一個時間序列,起始日期是2018/01/01,一共12天,每天對應的數值分別是1到12:

rng = pd.date_range('20180101', periods=12)
ts = pd.Series(np.arange(1,13), index=rng)

print(ts)

#### Outputs ####
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
Freq: D, dtype: int32

下面使用resample方法來做降采樣處理,頻率是5天,上面提到的兩個參數,都使用默認值:

ts_5d = ts.resample('5D').sum()
print(ts_5d)

#### Outputs ####
2018-01-01  15
2018-01-06  40
2018-01-11  23
Freq: 5D, dtype: int32

到這里,我相信不論是代碼還是代碼的結果都很好理解:無非就是每5天來個求和。在第一部分中,我們列出了closed參數的注釋,從注釋可知,closed默認的值是'left'。那如果把closed的值改為'right',結果有是怎么樣的?

ts_5d_rightclosed = ts.resample('5D', closed='right').sum()
print(ts_5d_rightclosed)

#### Outputs ####
2017-12-27   1
2018-01-01  20
2018-01-06  45
2018-01-11  12
Freq: 5D, dtype: int32

怎么會這樣?為什么變成了四個區(qū)間?closed=right到底做了什么?

別著急,我們來一步一步看看,這其中發(fā)生了什么事情。原始的時間序列是從18年1月1號到1月12號,一共12天。以5天為單位降采樣處理后,變成了三個5天,分別是:

  • 第一個5天:1-2-3-4-5-6
  • 第二個5天:6-7-8-9-10-11
  • 第三個5天:12-13-14-15-16

實際上,這三個5天就是三個區(qū)間了。和數學里區(qū)間的概念一樣,區(qū)間有開和閉的概念。在resample中,區(qū)間的開和閉,就是通過closed這個參數來控制。用數學符號表示的話:

closed = 'left' 左閉右開

上面的三個5天可以由以下的三個左閉右開的區(qū)間構成:

  • 區(qū)間1:[1, 6)
  • 區(qū)間2: [6, 11)
  • 區(qū)間3:[11, 16) 例子中,時間只到12號為止,但是這里會往后補足5天

現在,在這三個區(qū)間上做數據聚合也就很好理解了。對于區(qū)間1進行求和,也就是12、13、14、15、16這5天的值求和即可。區(qū)間2和區(qū)間3也是同理。所以下面的代碼就很好理解了:

ts_5d_leftclosed = ts.resample('5D', closed='right').sum()
print(ts_5d_leftclosed)

#### Outputs ####
2018-01-01  15
2018-01-06  40
2018-01-11  23
Freq: 5D, dtype: int32

closed = 'right' 左開右閉

上面的三個5天可以由以下的四個左開右閉的區(qū)間構成。注意,由于第一個5天是從1號到6號,但由于是左開區(qū)間,1號就落不到1到6號的那個區(qū)間,所以要往前補足:

  • 區(qū)間1:(27, 1]
  • 區(qū)間2:(1, 6]
  • 區(qū)間3: (6, 11]
  • 區(qū)間4:(11, 16]

現在,在這四個區(qū)間上做數據聚合也是一樣的道理了:對于區(qū)間1,是對28,29,30,31,1這五天的值求和(這里只有1號是有值的),其余的區(qū)間也是同理,但需要注意是左開右閉。所以到這里,上面“莫名其妙”的代碼和結果就好理解了。復制代碼和結果如下:

ts_5d_rightclosed = ts.resample('5D', closed='right').sum()
print(ts_5d_rightclosed)

#### Outputs ####
2017-12-27   1
2018-01-01  20
2018-01-06  45
2018-01-11  12
Freq: 5D, dtype: int32

理解了clsoed的意義以后,再來理解label就so easy了。由注釋可知,label的默認值是left。下面在closed='right'的基礎上,將label設置為right:

ts_5d_rightclosed_rightlable = ts.resample('5D', closed='right', label='right').sum()
print(ts_5d_rightclosed_rightlable)

#### Outputs ####
2018-01-01   1
2018-01-06  20
2018-01-11  45
2018-01-16  12
Freq: 5D, dtype: int32

于label為left相比,二者結果的異同點如下:

  • 相同點:一樣是四個區(qū)間,每個區(qū)間的聚合的值是一樣的
  • 不同點:每個區(qū)間的索引不同

不難發(fā)現,label為left的時候,就以區(qū)間左邊的那個日期作為索引;label,就以區(qū)間的右邊那個日期作為索引。

綜上,我們可以總結一下closed和label的用法和意義了:

  • closed:劃分區(qū)間的依據,left會劃成左閉右開區(qū)間;right會劃分成左開右閉的區(qū)間。一般來說,closed為right的時候,區(qū)間會比為left的時候多一個。區(qū)間劃分完畢,聚合運算就在這個區(qū)間內執(zhí)行。
  • label:劃分區(qū)間完畢,根據label的不同,區(qū)間的索引就不同。如果label為left,則區(qū)間左邊的日期作為索引;如果label為right,則區(qū)間右邊的日期作為索引。

升采樣

創(chuàng)建一個時間序列,起始日期是2018/01/01,一共2天,每天對應的數值分別是1到2:

rng = pd.date_range('20180101', periods=2)
ts = pd.Series(np.arange(1,2), index=rng)

print(ts)

#### Outputs ####
2018-01-01  1
2018-01-02  2
Freq: D, dtype: int32

升采樣就不涉及到closed和label的值,也就是會忽略(筒子們可以驗證一下),所以我們在使用的時候無需設置這兩個值。對于升采樣,前面也提到,主要是涉及到值的填充。有下面的四種填充方法(實際是三種):

  • 不填充。那么對應無值的地方,用NaN代替。對應的方法是asfreq。
  • 用前值填充。用前面的值填充無值的地方。對應的方法是ffill或者pad。這里方便記憶,ffill的第一個f是代表forward,向前的意思
  • 用后值填充。對應的方法是bfill,b代表back。

下面是一個例子:

ts_6h_asfreq = ts.resample('6H').asfreq()
print(ts_6h_asfreq)

ts_6h_pad = ts.resample('6H').pad()
print(ts_6h_pad)

ts_6h_ffill = ts.resample('6H').ffill()
print(ts_6h_ffill)

ts_6h_bfill = ts.resample('6H').bfill()
print(ts_6h_bfill)

#### Outputs ####
2018-01-01 00:00:00  1.0
2018-01-01 06:00:00  NaN
2018-01-01 12:00:00  NaN
2018-01-01 18:00:00  NaN
2018-01-02 00:00:00  2.0
Freq: 6H, dtype: float64
2018-01-01 00:00:00  1
2018-01-01 06:00:00  1
2018-01-01 12:00:00  1
2018-01-01 18:00:00  1
2018-01-02 00:00:00  2
Freq: 6H, dtype: int32
2018-01-01 00:00:00  1
2018-01-01 06:00:00  1
2018-01-01 12:00:00  1
2018-01-01 18:00:00  1
2018-01-02 00:00:00  2
Freq: 6H, dtype: int32
2018-01-01 00:00:00  1
2018-01-01 06:00:00  2
2018-01-01 12:00:00  2
2018-01-01 18:00:00  2
2018-01-02 00:00:00  2
Freq: 6H, dtype: int32

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • Python還能這么玩之用Python修改了班花的開機密碼

    Python還能這么玩之用Python修改了班花的開機密碼

    今天帶大家學習如何用Python修改開機密碼,文中有非常詳細的代碼示例,喜歡惡作劇的小伙伴可以看一下,不過不要亂用哦,需要的朋友可以參考下
    2021-06-06
  • python使用knn實現特征向量分類

    python使用knn實現特征向量分類

    這篇文章主要為大家詳細介紹了python使用knn實現特征向量分類,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • Python sqlparse 解析庫的基礎使用過程解析

    Python sqlparse 解析庫的基礎使用過程解析

    sqlparse 是一個 Python 庫,是一個用于 Python 的非驗證 SQL 解析器, 用于解析 SQL 語句并提供一個簡單的 API 來訪問解析后的 SQL 結構,這篇文章主要介紹了Python sqlparse 解析庫的基礎使用,需要的朋友可以參考下
    2024-08-08
  • python 字段拆分詳解

    python 字段拆分詳解

    今天小編就為大家分享一篇python 字段拆分詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • 詳解TensorFlow2實現前向傳播

    詳解TensorFlow2實現前向傳播

    這篇文章主要介紹了TensorFlow2如何實現前向傳播,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-09-09
  • 淺談numpy生成數組的零值問題

    淺談numpy生成數組的零值問題

    今天小編就為大家分享一篇淺談numpy生成數組的零值問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-11-11
  • win7下 python3.6 安裝opencv 和 opencv-contrib-python解決 cv2.xfeatures2d.SIFT_create() 的問題

    win7下 python3.6 安裝opencv 和 opencv-contrib-python解決 cv2.xfeat

    這篇文章主要介紹了win7下 python3.6 安裝opencv 和 opencv-contrib-python解決 cv2.xfeatures2d.SIFT_create() 的問題,需要的朋友可以參考下
    2019-10-10
  • python3如何使用saml2.0協(xié)議接入SSO

    python3如何使用saml2.0協(xié)議接入SSO

    SAML是一種用于在不同系統(tǒng)之間傳輸安全聲明的XML框架,通過IDP和SP之間的重定向訪問,SP向IDP請求用戶身份認證,IDP驗證用戶身份后返回SAML應答,本文以python3和python3-saml庫為例,介紹了如何接入公司SSO系統(tǒng),包括配置和處理登錄和登出請求
    2024-11-11
  • python pandas消除空值和空格以及 Nan數據替換方法

    python pandas消除空值和空格以及 Nan數據替換方法

    今天小編就為大家分享一篇python pandas消除空值和空格以及 Nan數據替換方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-10-10
  • 淺談Python中range和xrange的區(qū)別

    淺談Python中range和xrange的區(qū)別

    本篇文章主要介紹了淺談Python中range和xrange的區(qū)別,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-12-12

最新評論

来宾市| 勃利县| 忻城县| 广水市| 独山县| 汤阴县| 汉阴县| 巢湖市| 连南| 吴旗县| 从化市| 镇原县| 连城县| 台江县| 香港| 乃东县| 尼勒克县| 奉贤区| 磐安县| 建宁县| 光山县| 从化市| 四子王旗| 鄂托克前旗| 桃源县| 大英县| 大渡口区| 丹巴县| 五莲县| 拜泉县| 灵丘县| 江孜县| 涞水县| 东方市| 含山县| 南漳县| 隆化县| 蓬溪县| 西青区| 巫溪县| 江陵县|