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


五、重采樣與頻率轉換

1. resample方法

rng = pd.date_range('1/3/2019',periods=1000,freq='D')
rng

 

 

2. 降采樣

(1)resample將高頻率數據聚合到低頻率

 舉例:已知:‘1分鍾’數據,想要通過求和的方式將這些數據聚合到“5分鍾”塊中

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

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

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

 

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

(2)通過groupby進行重采樣

 

3. 上采樣與插值

將低頻率數據轉換到高頻率,就不需要聚合了

 

將其重采樣到日頻率,默認會引入缺失值

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

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

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

 

4. 通過日期進行重采樣

(1)降采樣

annual_frame = frame.resample('A-DEC',how='mean')
annual_frame

(2)上采樣

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

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

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

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

 

 

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()

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

close_px.ix['2009'].plot()

蘋果公司的股價波動,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()

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM