五、重采樣與頻率轉換
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()