Pandas 時間序列相關總結
1. 前言
前面四小節(jié)我們通過 Pandas 時間序列的概述,常用三種時間序列類型的創(chuàng)建、常用屬性和方法,以及對應的索引類型的的創(chuàng)建和使用等知識的學習,基本掌握了時間序列數(shù)據(jù)類型的處理方法,本小節(jié)我們將對時間序列的相關知識進行總結,以及這三種常用時間序列類型的相互轉換,通過進一步的學習,幫助我們今后更加高效的處理和分析時間序列相關的數(shù)據(jù)集。
2. 頻率和偏移
我們在學習三種時間序列類型時,經(jīng)常會接觸到創(chuàng)建對象時指定的頻率和時間偏移量,Pandas 時間序列中提供了時間或日期偏移量,對于每一個偏移量的 Pandas 都有對應的頻率值:
頻率值 | 偏移量 | 說明 |
---|---|---|
D | Day | 日歷日 |
H | Hour | 小時 |
T 或 min | Minute | 分 |
S | Second | 秒 |
L 或 ms | Milli | 毫秒 |
U | Micro | 微秒 |
M | MonthEnd | 每月最后一個日歷日 |
BM | BusinessMonthEnd | 每月最后一個工作日 |
3. 時間序列類型轉換
我們在用到時間序列的三種常用類型時,經(jīng)常要用到他們之間的相互轉換,便于我們對數(shù)據(jù)的進一步分析處理。下面我們就來學習一下用于時間序列類型轉換的三個函數(shù):
2.1 to_datetime() 函數(shù)
該函數(shù)將數(shù)據(jù)值轉換為時間戳。
pd.to_datetime(arg, errors='raise', dayfirst=False, yearfirst=False, utc=None, box=True, format=None, exact=True, unit=None, infer_datetime_format=False, origin='unix', cache=True)
參數(shù)名 | 說明 |
---|---|
arg | 要轉為時間戳對象的內容,類型可以為 str、int、float 等等 |
errors | 對于無效解析的相應方式有三種值:ignore,raise,coerce,默認是 raise |
exact | 精度 |
format | 解析出來的時間格式 |
下面我們通過代碼演示將一個日期時間格式的字符串轉換為時間戳 Timestamp :
# 導入 pandas 數(shù)據(jù)包
import pandas as pd
# 通過 to_datetime() 將 str 數(shù)據(jù)類型 函數(shù)轉換為 時間戳
pd.to_datetime('2020-01-03')
# --- 輸出結果 ---
Timestamp('2020-01-03 00:00:00')
2.2 to_period() 函數(shù)
該函數(shù)用于將時間戳轉換為時期數(shù)據(jù)。轉換時要指定轉換的頻率,因為時間戳表示的是固定的時間點,而時期表示的是時間區(qū)間。
# 導入 pandas 數(shù)據(jù)包
import pandas as pd
tms_res=pd.Timestamp('2020-11-23 10:40:00')
print(tms_res)
# --- 輸出結果 ---
2020-11-23 10:40:00
# 通過 to_period 函數(shù)指定轉換頻率,轉換成時期對象
period_res=tms_res.to_period('H')
print(period_res)
print(type(period_res))
# --- 輸出結果 ---
2020-11-23 10:00
<class 'pandas._libs.tslibs.period.Period'>
2.3 to_timestamp() 函數(shù)
該函數(shù)用于將時期數(shù)據(jù)轉換為時間戳。
# 導入 pandas 數(shù)據(jù)包
import pandas as pd
# 定義時期對象
period_res=pd.Period('2020-11-23 10:40')
print(period_res)
# --- 輸出結果 ---
2020-11-23 10:40
# 通過函數(shù) to_timetamp() 轉換為 時間戳
tms_res=period_res.to_timestamp()
print(tms_res)
print(type(tms_res))
# --- 輸出結果 ---
2020-11-23 10:40:00
<class 'pandas._libs.tslibs.timestamps.Timestamp'>
# 還可以通過 how 參數(shù)指定日期的開始還是結束時間進行轉換為時間戳
tms_res=period_res.to_timestamp(how='end')
print(tms_res)
# --- 輸出結果 ---
2020-11-23 10:40:59.999999999
4. 重采樣
Pandas 時間序列重采樣,是指將時間序列從一個頻率轉換為另外一個頻率的操作,主要是通過函數(shù) resample () 進行實現(xiàn)的,采樣又可以分為降采樣(高頻率的數(shù)據(jù)聚合到低頻率的數(shù)據(jù)),升采樣(低頻率數(shù)據(jù)轉換為高頻率數(shù)據(jù))。
resample(rule, axis=0, closed=None, label=None, convention='start', kind=None, loffset=None, base=None, on=None, level=None, origin='start_day', offset=None)
下面是該函數(shù)常用參數(shù)的說明:
參數(shù)名 | 說明 |
---|---|
rule | 轉換的偏移規(guī)則 |
axis | 默認是縱軸 (axis=0) |
closed | 降采樣時,哪一端是閉合的,默認是 right |
label | 降采樣時,設置聚合值的標簽 |
convention | 重采樣時期時,低頻率轉換為高頻率所采用的約定,默認是 end |
下面我們通過代碼演示一下該函數(shù)的使用:
# 導入pandas包
import pandas as pd
data_path="C:/Users/13965/Documents/myFuture/IMOOC/pandasCourse-progress/data_source/第25小節(jié)/execl數(shù)據(jù)demo.xlsx"
# 解析數(shù)據(jù)
data = pd.read_excel(data_path)
print(data)
# --- 輸出結果 ---
時間 人數(shù) 銷售數(shù)量
0 2020-01-02 12:25:00 12 234
1 2020-01-02 12:30:00 23 300
2 2020-01-02 12:35:00 44 345
3 2020-01-02 12:40:00 56 401
4 2020-01-02 12:45:00 60 420
5 2020-01-02 12:50:00 70 623
# 將時間列的 str 值轉換為 時間戳索引
data.index=pd.to_datetime(data['時間'])
del(data['時間'])
print(data)
# --- 輸出結果 ---
人數(shù) 銷售數(shù)量
時間
2020-01-02 12:25:00 12 234
2020-01-02 12:30:00 23 300
2020-01-02 12:35:00 44 345
2020-01-02 12:40:00 56 401
2020-01-02 12:45:00 60 420
2020-01-02 12:50:00 70 623
# 1. 降采樣 我們之前的采樣的頻率為 5 分鐘,我們將采樣頻率調整為 10 分鐘
ss=data.resample('10MIN').mean()
print(ss)
# --- 輸出結果 ---
人數(shù) 銷售數(shù)量
時間
2020-01-02 12:20:00 12.0 234.0
2020-01-02 12:30:00 33.5 322.5
2020-01-02 12:40:00 58.0 410.5
2020-01-02 12:50:00 70.0 623.0
# 2.升采樣 我們將之前的采樣頻率 5 分鐘,改成 2 分鐘進行重采樣,這里注意 默認使用 NaN 進行填充
ss=data.resample('3MIN').mean()
print(ss)
# --- 輸出結果 ---
人數(shù) 銷售數(shù)量
時間
2020-01-02 12:24:00 12.0 234.0
2020-01-02 12:27:00 NaN NaN
2020-01-02 12:30:00 23.0 300.0
2020-01-02 12:33:00 44.0 345.0
2020-01-02 12:36:00 NaN NaN
2020-01-02 12:39:00 56.0 401.0
2020-01-02 12:42:00 NaN NaN
2020-01-02 12:45:00 60.0 420.0
2020-01-02 12:48:00 70.0 623.0
5. 小結
本小節(jié)我們主要對時間序列的知識進行總結,主要包括時間序列頻率和偏移的概念,數(shù)據(jù)類型之間的轉換,數(shù)據(jù)的重采樣。本節(jié)課程的重點如下:
- 時間序列數(shù)據(jù)類型之間的轉換函數(shù) to_datetime () , to_period () , to_timestamp ();
- 重采樣函數(shù) resample () 的應用。