【Python數據科學手冊】Pandas——十二、處理時間序列

十二、處理時間序列

1.Python的日期與時間工具

1)Python原生的日期使勁按工具:datetime和dateutil

datetime(year, month, day[, hour[, minute[, second[, microsecond[,tzinfo]]]]])
在這裏插入圖片描述

2)時間類型數組:Numpy的datetime64類型

性能相對原生工具好
在這裏插入圖片描述
NumPy 會自動判斷輸入時間需要使用的時間單位,也可使設置格式。
在這裏插入圖片描述

代碼 含義 時間跨度 (相對) 時間跨度 (絕對)
Y 年(year) ± 9.2e18 年 [9.2e18 BC, 9.2e18 AD]
M 月(month) ± 7.6e17 年 [7.6e17 BC, 7.6e17 AD]
W 周(week) ± 1.7e17 年 [1.7e17 BC, 1.7e17 AD]
D 日(day) ± 2.5e16 年 [2.5e16 BC, 2.5e16 AD]
h 時(hour) ± 1.0e15 年 [1.0e15 BC, 1.0e15 AD]
m 分(minute) ± 1.7e13 年 [1.7e13 BC, 1.7e13 AD]
s 秒(second) ± 2.9e12 年 [ 2.9e9 BC, 2.9e9 AD]
ms 毫秒(millisecond) ± 2.9e9 年 [ 2.9e6 BC, 2.9e6 AD]
us 微秒(microsecond) ± 2.9e6 年 [290301 BC, 294241 AD]
ns 納秒(nanosecond) ± 292 年 [ 1678 AD, 2262 AD]
ps 皮秒(picosecond) ± 106 天 [ 1969 AD, 1970 AD]
fs 飛秒(femtosecond) ± 2.6 小時 [ 1969 AD, 1970 AD]
as 原秒(attosecond) ± 9.2 秒 [ 1969 AD, 1970 AD]

3)pandas的日期時間工具:Timestamp 對象

Pandas 所有關於日期與時間的處理方法全部都是通過 Timestamp 對象實現的,它利用numpy.datetime64 的有效存儲和向量化接口將 datetime 和 dateutil 的易用性有機結合起來。
在這裏插入圖片描述
註釋:datetime.timedelta對象代表兩個時間之間的時間差,兩個date或datetime對象相減就可以返回一個timedelta對象

2.Pandas時間序列:用時間作索引

Pandas時間序列工具非常適合用來處理帶時間戳的索引數據。pd.DatetimeIndex可以構建一個時間index
在這裏插入圖片描述
同樣可以使用series取值方法
在這裏插入圖片描述
再次基礎上還可以彙總取值
在這裏插入圖片描述

3.Pandas時間序列數據結構

時間戳數據:原生timestamp- numpy.datetime64 -->pandas.timestamp。對應的索引數據結構是 DatetimeIndex。
時間週期數據: numpy.datetime64 將固定頻率的時間間隔進行編碼–>pandas.Period。對應的索引數據結構是 PeriodIndex。
時間增量和持續時間:原生datetime.timedelta -numpy.timedelta64->pands.Timedelta。對應的索引數據結構是 TimedeltaIndex。

  1. pd.to_datetime()可以將很多日期格式解析成pandas.timestamp,任何 DatetimeIndex 類型都可以通過 to_period() 方法和一個頻率代碼轉換成 PeriodIndex類型。
    在這裏插入圖片描述
    當用一個日期減去另一個日期時,返回的結果是 TimedeltaIndex 類型
    在這裏插入圖片描述
  2. 有規律的時間序列
    pd.date_range() 可以處理時間戳、 pd.period_range() 可以處理週期、 pd.timedelta_range() 可以處理時間間隔。
    pd.date_range(start=None, end=None, periods=None, freq=None, tz=None, normalize=False, name=None, closed=None, **kwargs)
    在這裏插入圖片描述

4.時間頻率與偏移量

代碼 描述 代碼 描述
D 天(calendar day,按日曆算,含雙休日) B 天(business day,僅含工作日)
W 周(weekly)
M 月末(month end) BM 月末(business month end,僅含工作日)
Q 季末(quarter end) BQ 季末(business quarter end,僅含工作日)
A 年末(year end) BA 年末(business year end,僅含工作日)
H 小時(hours) BH 小時(business hours,工作時間)
T 分鐘(minutes)
S 秒(seconds)
L 毫秒(milliseonds)
U 微秒(microseconds)
N 納秒(nanoseconds)
代碼 頻率
MS 月初(month start)
BMS 月初(business month start,僅含工作日)
QS 季初(quarter start)
BQS 季初(business quarter start,僅含工作日)
AS 年初(year start)
BAS 年初(business year start,僅含工作日)

在頻率代碼後面加三位月份縮寫字母來改變季、年頻率的開始時間
在這裏插入圖片描述
所有這些頻率代碼都對應 Pandas 時間序列的偏移量,具體內容可以在pd.tseries.offsets模塊中找到。例如from pandas.tseries.offsets import BDay,參數freq=BDay()等價與freq='B'

5.重新取樣、遷移和窗口

1)重新取樣與頻率轉換

處理時間序列數據時,經常需要按照新的頻率(更高頻率、更低頻率)對數據進行重新取樣。你可以通過 resample() 方法解決這個問題,或者用更簡單的 asfreq() 方法。這兩個方法的主要差異在於, resample() 方法是以數據累計(data aggregation,計算平均之類)爲基礎,而asfreq() 方法是以數據選擇(data selection,最後一天之類)爲基礎。

2)時間遷移

另一種常用的時間序列操作是對數據按時間進行遷移。 Pandas 有兩種解決這類問題的方法: shift() 和 tshift()。簡單來說, shift() 就是遷移數據,而 tshift() 就是遷移索引。

3) 移動時間窗口

Pandas 處理時間序列數據的第 3 種操作是移動統計值(rolling statistics)。這些指標可以通過 Series 和 DataFrame 的 rolling() 屬性來實現,它會返回與 groupby 操作類似的結果

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章