天天看點

pandas處理時間序列(3):重采樣與頻率轉換

五、重采樣與頻率轉換

1. resample方法

rng = pd.date_range('1/3/2019',periods=1000,freq='D')
rng
      
pandas處理時間序列(3):重采樣與頻率轉換
pandas處理時間序列(3):重采樣與頻率轉換
pandas處理時間序列(3):重采樣與頻率轉換
pandas處理時間序列(3):重采樣與頻率轉換
pandas處理時間序列(3):重采樣與頻率轉換
pandas處理時間序列(3):重采樣與頻率轉換

2. 降采樣

(1)resample将高頻率資料聚合到低頻率

 舉例:已知:‘1分鐘’資料,想要通過求和的方式将這些資料聚合到“5分鐘”塊中

pandas處理時間序列(3):重采樣與頻率轉換

left:[0:5)、[5:10)、[10-15)

right :(0:5]、(5:10]、(10-15]

  傳入的頻率将會以“5分鐘”的增量定義面元邊界。預設情況下,面元的右邊界是包含的,是以00:00到00:05的區間中是包含00:05的。傳入colsed='left'會讓區間以左邊界閉合:

pandas處理時間序列(3):重采樣與頻率轉換
pandas處理時間序列(3):重采樣與頻率轉換
pandas處理時間序列(3):重采樣與頻率轉換

  最後,你可以希望對結果索引做一些位移,比如從右邊界減去一秒以便更容易明白該時間戳到底表示的是哪個區間。通過loffset設定一個字元串或日期片品質即可實作:

pandas處理時間序列(3):重采樣與頻率轉換

(2)通過groupby進行重采樣

pandas處理時間序列(3):重采樣與頻率轉換
pandas處理時間序列(3):重采樣與頻率轉換

3. 上采樣與插值

将低頻率資料轉換到高頻率,就不需要聚合了

pandas處理時間序列(3):重采樣與頻率轉換

将其重采樣到日頻率,預設會引入缺失值

pandas處理時間序列(3):重采樣與頻率轉換

如果你想要用前面的周型值填充“非星期三”。resampling的填充和插值方式跟fillna和reindex的一樣。

pandas處理時間序列(3):重采樣與頻率轉換

同時,這裡可以隻填充指定的日期數(目的是限制前面的觀察值的持續使用距離)。

pandas處理時間序列(3):重采樣與頻率轉換

注意,新的日期索引完全沒必要和舊的相交:

pandas處理時間序列(3):重采樣與頻率轉換

4. 通過日期進行重采樣

(1)降采樣

pandas處理時間序列(3):重采樣與頻率轉換
annual_frame = frame.resample('A-DEC',how='mean')
annual_frame
      
pandas處理時間序列(3):重采樣與頻率轉換

(2)上采樣

  上采樣必須要決定在新頻率中各區間的哪段用于放置原來的值,就像asfreq方法那樣。convention參數預設為'end',可設定為'start':

pandas處理時間序列(3):重采樣與頻率轉換
pandas處理時間序列(3):重采樣與頻率轉換

   由于時期指的是時間區間,是以上采樣和降采樣的規則就比較嚴格:

  • 在降采樣中,目标頻率必須是源頻率的子時期(subperiod);
  • 在上采樣中,目标頻率必須是源頻率的逾時期(superperiod)

   如果不滿足這些條件,就會發生異常。這主要影響的是按季、年、周計算的頻率。例如,由Q-MAR定義的時間區間隻能升采樣為A-MAR、A-JUN、A-SEP、A-DEC等。

pandas處理時間序列(3):重采樣與頻率轉換

5. 時間序列繪圖 

>>> import pandas as pd
Backend TkAgg is interactive backend. Turning interactive mode on.
>>> import numpy as np
>>> from pandas import DataFrame,Series
>>> close_px_all = pd.read_csv('D:\python\DataAnalysis\data\stock_px.csv',parse_dates=True,index_col=0)
>>> close_px = close_px_all[['AAPL','MSFT','XOM']]
>>> close_px = close_px.resample('B').ffill()
>>> close_px
              AAPL   MSFT    XOM
1990-02-01    7.86   0.51   6.12
1990-02-02    8.00   0.51   6.24
1990-02-05    8.18   0.51   6.25
1990-02-06    8.12   0.51   6.23
1990-02-07    7.77   0.51   6.33
 
            ...    ...    ...
 
2011-10-12  402.19  26.96  77.16
2011-10-13  408.43  27.18  76.37
2011-10-14  422.00  27.27  78.11
 
[5662 rows x 3 columns]
      
close_px['AAPL'].plot()
      
pandas處理時間序列(3):重采樣與頻率轉換

切片2009年資料,所欲資料都被繪制在subplot上,并且月份和年度都被格式化到X軸上

close_px.ix['2009'].plot()
      
pandas處理時間序列(3):重采樣與頻率轉換

蘋果公司的股價波動,2011年1月到3月

close_px['AAPL'].ix['01-2011':'03-2011'].plot()
      
appl_q = close_px['AAPL'].resample('Q-DEC').ffill()
appl_q.ix['2009':].plot()
      
下一篇: 采樣

繼續閱讀