pandas時間序列
- datatime子產品
-
- 日期和時間資料類型
- 字元串與datetime之間的轉換
- 時間序列基礎
-
- 索引,選取,子集,構造
- 重複索引時間序列
- 日期的範圍,頻率,移動
-
- 生成時間範圍
- 頻率和日期偏移
- 時區處理
-
- 時區的轉換
- Timestamp對象與時區
- 時期
-
- 時期的頻率轉換
- 按季度計算的時期頻率
- Timestamp與Period的轉換
- 重采樣及頻率轉換
- 時間序列繪圖
-
- 移動視窗函數
datatime子產品
日期和時間資料類型
now=datetime.datetime.now() #生成目前日期和時間
now.year
now.day
now.second
delta=datetime.timedelta(100,10)
delta.days
delta.seconds
datetime子產品中的資料類型
類型 | 說明 |
---|---|
date | 儲存月曆日期,(年,月,日) |
time | 儲存時間(時,分,秒,毫秒) |
datetime | 存儲日期和時間(年,月,日,時,分,秒,毫秒) |
timedelta | 表示兩個datetime值之間的差(日,秒,毫秒) |
字元串與datetime之間的轉換
from dateutil.parser import parse
# 時間轉回字元串
stamp=datetime.datetime(2011,1,3)
str(stamp)
stamp.strftime('%Y-%m-%d')
# 字元串轉為時間
value='2011-01-03'
values=['2011-01-03','2012-02-06']
datetime.datetime.strptime(value,'%Y-%m-%d')
parse(value) #幾乎能解釋所有日期表示形式
parse('6/12/2011',dayfirst=True)
print(pd.to_datetime(value))
print(pd.to_datetime(values)) #傳回DatatimeIndex
datetime格式定義
代碼 | 說明 |
---|---|
%Y | 4位數年 |
%y | 2位數年 |
%m | 2位數月 |
%d | 2位數日 |
%H | 2位24制小時 |
%I | 2位12制小時 |
%M | 2位數分 |
%S | 2位數秒 |
%w | 用整數表示星期,0為星期天 |
%U | 一年的第幾周,星期天為第一天,0周是第一個星期天的前幾天 |
%W | 一年的第幾周,星期一位第一天,0周是第一個星期一的前幾天 |
%z | _HHMM或-HHMM表示UTC時區偏移量 |
%F | %Y-%m-%d的簡寫 |
%D | %m-%d-%Y |
特定于目前環境的日期格式
代碼 | 說明 |
---|---|
%a | 星期幾簡寫 |
%A | 星期幾全稱 |
%b | 月份簡寫 |
%B | 月份全稱 |
%c | 完整的日期和時間 |
%p | 不同環境的AM或PM |
%x | 适合于目前環境的日期格式 |
%X | 适合于目前環境的時間格式 |
時間序列基礎
- 如果index資料類型為datetime.datetime,則資料為TimeSeries對象,index為DatetimeIndex
- pandas用numpy的datetime64類型儲存時間拽
s.index.dtype
- DateTimeIndex中各個标量值是pandas的Timestamp對象,有需要可随時自動轉換為datetime對象
索引,選取,子集,構造
- 可以傳入字元串日期,datetime,Timestamp
- 傳入可被解釋的日期字元串
ts['1/10/2012']
- 可傳入年或年月
ts['2011']``ts['2011-09']
- 日期切片隻對符合規則有效
ts[datetime(2011,1,7):]
- 可以用不存在索引清單中的時間切片選取範圍
-
ts.truncate(after='1/9/2001')
重複索引時間序列
-
傳回False表示不唯一ts.index.unique
- 對非唯一時間拽進行聚合
ts.groupby(level=0).mean()
日期的範圍,頻率,移動
生成時間範圍
index=pd.date_range('4/1/2012','6/1/2013')
index=pd.date_range(start='4/1/2012',periods=20)
index=pd.date_range(end='4/1/2012',periods=20)
index=pd.date_range(start='4/1/2012 12:56:31',periods=20) #時間拽會被保留
index=pd.date_range(start='4/1/2012 12:56:31',periods=20,normalize=True) #把時間設定為0點
頻率和日期偏移
頻率類型
from pandas.tseries.offsets import Hour,Minute
hour=Hour()
hour=Hour(4)
Hour(2)+Minute(30) #頻率加法,範圍更小的機關類型
index=pd.date_range(start='4/1/2012 12:56:31',periods=20,freq='4h') #頻率為4小時
index=pd.date_range(start='4/1/2012 12:56:31',periods=20,freq='1h30min') #頻率為4小時
index=pd.date_range('1/1/2012','1/1/2013',freq='BM') #設定頻率 每月最後一個工作日
index=pd.date_range('1/1/2012','1/1/2013',freq='WOM-3FRI') #設定頻率 每月的第3個星期5
偏移
ts/ts.shift(1)-1 #計算百分比,正數時資料下移,負數時資料上移
ts.shift(2,freg='M') #移動索引,正數時索引上移,,負數時索引下移,可以了解為資料移動并去除NA值索引
now=datetime.now()
now+MonthEnd() #傳回目前月的最後一天
now+MonthEnd(2) #傳回下個月的最後一天
MonthEnd().rollforward(now) #傳回目前月的最後一天
MonthEnd().rollback(now) #傳回上一個月的最後一天
ts.groupby(MonthEnd().rollforward).mean() #按月分組統計
ts.resample('M',how='mean') #按月分組統計
時間序列的基本頻率
别名 | 偏移量類型 | 說明 |
---|---|---|
D | Day | 每月曆日 |
B | BusinessDay | 每工作日 |
H | Hour | 每小時 |
T或min | Minute | 每分鐘 |
S | Second | 每秒 |
L或ms | Milli | 每毫秒(千分之一秒) |
U | Micro | 每微妙(百萬分之一秒) |
M | MonthEnd | 每月最後一個月曆日 |
BM | BusinessMonthEnd | 每月最後一個工作日 |
MS | MonthBegin | 每月第一個月曆日 |
BMS | BusinessMonthBegin | 每月第一個工作日 |
W-MON | Week | 每周,指定起算的星期,(MON,TUE,WED,THU,FRI,SAT,SUN) |
WOM-1MON | WeekOfMonth | 産生每月的第幾個星期幾 |
Q-JAN | QuarterEnd | 每季度,每年以指定月份結束,标記為指定月最後一個月曆日,(JAN,FEB,MAR,APR,MAY,JUN,JUL,AUG,SEP,OCT,NOV,DEC) |
BQ-JAN | BusinessQuarterEnd | 每季度,每年以指定月份結束,标記為指定月最後一個工作日 |
QS-JAN | QuarterBegin | 每季度,每年以指定月份結束,标記為指定月第一個月曆日 |
BQS-JAN | BusinessQuarterBegin | 每季度,每年以指定月份結束,标記為指定月第一個工作日 |
A-JAN | YearEnd | 每年,指定結束月,标記為指定月最後一個月曆日 |
BA-JAN | BusinessYearEnd | 每年,指定結束月,标記為指定月最後一個工作日 |
AS-JAM | YearBegin | 每年,指定結束月,标記為指定月第一個月曆日 |
BAS-JAM | BusinessYearBegin | 每年,指定結束月,标記為指定月第一個工作日 |
時區處理
- 不同時區的運算時,實際時間拽用UTC存儲
時區的轉換
tz_localize和tz_convert是DateTimeIndex的執行個體方法
import pytz
pytz.common_timezones[-5:] #擷取時區名稱
pytz.timezone('US/Eastern') #擷取時區對象
index=pd.date_range('3/9/2012',periods=10,freq='D',tz='UTC') #設定時區集
ts.tz_localize('UTC') #本地化的設定,把什麼實際設定為本地
ts.tz_convert('US/Eastern') #時區轉換
Timestamp對象與時區
stamp=pd.Timestamp('2011-03-12 04:00')
stamp=pd.Timestamp('2011-03-12 04:00',tz='UTC')
stamp.tz_localize('UTC')
stamp.tz_convert('US/Eastern')
stamp.value #傳回1970年1月1日算起的納秒數
stamp+Hour()
時期
pd.Period('2007',freq='A-DEC') #生成時期對象
pd.period_range('2006','2009',freq='A-DEC') #建立時期範圍 傳回PeriodIndex
pd.PeriodIndex(['2001Q3','2002Q2','2003Q3'],freq='Q-DEC') #建立PeriodIndex
pd.PeriodIndex(year=data.year,quarter=data.quarter,freq='Q-DEC') #合并兩列時間
時期的頻率轉換

- PeriodIndex和TimeSeries的頻率轉換
pandas時間序列datatime子產品時間序列基礎時區處理時期時間序列繪圖 pandas時間序列datatime子產品時間序列基礎時區處理時期時間序列繪圖
按季度計算的時期頻率
Timestamp與Period的轉換
ts.to_period('M')
to_timestamp(how='end')
重采樣及頻率轉換
- 降采樣
pandas時間序列datatime子產品時間序列基礎時區處理時期時間序列繪圖 pandas時間序列datatime子產品時間序列基礎時區處理時期時間序列繪圖 pandas時間序列datatime子產品時間序列基礎時區處理時期時間序列繪圖 pandas時間序列datatime子產品時間序列基礎時區處理時期時間序列繪圖 - 升采樣
pandas時間序列datatime子產品時間序列基礎時區處理時期時間序列繪圖 pandas時間序列datatime子產品時間序列基礎時區處理時期時間序列繪圖 pandas時間序列datatime子產品時間序列基礎時區處理時期時間序列繪圖 - convention
pandas時間序列datatime子產品時間序列基礎時區處理時期時間序列繪圖 pandas時間序列datatime子產品時間序列基礎時區處理時期時間序列繪圖 - OHLC重采樣
pandas時間序列datatime子產品時間序列基礎時區處理時期時間序列繪圖
resample方法的參數
參數 | 說明 |
---|---|
rule | 表示重采樣頻率的字元串或DataOffset類型 |
how | 用于産生聚合值得函數名或函數清單,‘mean’,‘ohlc’,np.max,預設為mean,還有first,last,median,max,min等 |
axis | 重采樣軸,預設0 |
fill_method | 內插補點方式ffill,bfill |
closed | 設定閉合(包含)端,預設為right |
label | 設定聚合标簽,預設right |
loffset | 面元标簽校正值,如‘-1s’/Second(-1) |
limit | 允許填充最大時期數 |
kind | 聚合到時期(period)或時間拽(timestamp),預設聚合元索引類型 |
convention | 高頻轉換時采用的約定,預設為end,還有start |
時間序列繪圖
df.ix['2009'].plot()
ser.ix['01-2001':'03-2011'].plot()
移動視窗函數
#250日均線
pd.rolling_mean(ser,250).plot()
#250每日标準差
pd.rolling_std(ser,250,min_periods=10)
移動視窗和指數權重函數
函數 | 說明 |
---|---|
rolling_count | 傳回各視窗非na觀測值的數量 |
rolling_sum | 移動視窗的和 |
rolling_mean | 平均值 |
rolling_median | 中位數 |
rolling_var,rolling_std | 方差,标準差 |
rolling_skew,rolling_kurt | 偏度,峰度 |
rolling_min,rolling_max | 最小值,最大值 |
rolling_quantile | 指定百分位/樣本分位數位置的值 |
rolling_corr,rolling_cov | 相關系數,協方差 |
rolling_apply | 對移動視窗應用普通數組函數 |
ewma | 指數權重移動平均 |
ewmvar,ewmstd | 指數權重移動方差,标準差 |
ewmcorr,ewmcov | 指數權重移動相關系數,協方差 |