Pandas 時間序列之 Period
1. 前言
上一小節我們學習了 Pandas 時間序列的第一種類型,時間戳(Timestamp),表示的是一個特定的時間點,除此之外,時間序列還有一種時間時期 (Period)類型,它表示的是時間區間,比如數日、數月、數年等數據,這小節我們開始學習 Period 類型的創建和使用方法。
2. 時期 Period
2.1 Period 的創建方法
Pandas 庫中提供了特定的函數用于創建 Period 時期數據。其中提供了豐富參數邊便于靈活的配置:
pd.Period(value=None, freq=None, ordinal=None, year=None, month=None,quarter=None, day=None, hour=None, minute=None, second=None)
參數名 | 說明 |
---|---|
value | 要轉換為時期的值 |
freq | 時期的移動頻率 |
year、month、quarter、day、hour | 年、月、季、日、時 |
下面我們通過代碼展示具體的創建方法:
# 導入 pandas 數據包
import pandas as pd
# 創建時期對象
period_res = pd.Period('2020-12', freq = 'D')
print(period_res)
# --- 輸出結果 ---
2020-12-01
# 結果解析:這里可以看到,我們通過指定 “2020-12” 和 頻率 "D" 表示 day 的縮寫,輸出的結果是 2020-12-01 的時期。對于頻率的理解,我們可以理解為移動的單位,下面我們通過運算看一下,freq 的效果:
print(period_res+3)
# --- 輸出結果 ---
2017-12-04
2.2 時期常用的屬性和方法
Period 中提供了豐富的屬性和方法供用戶使用,方便了對時期數據的處理和分析,下面我們列舉一些常用的屬性和方法,并用代碼進行應用演示。
1. start_time 和 end_time 屬性
這兩個屬性分別用于獲取時期數據對象的開始時間和結束時間,返回的值是時間戳。
# 導入 pandas 數據包
import pandas as pd
period_res = pd.Period('2017-12', freq = '2D')
print(period_res.start_time)
# --- 輸出結果 ---
2017-12-01 00:00:00
print(period_res.end_time)
# --- 輸出結果 ---
2017-12-02 23:59:59.999999999
2. freq 和 freqstr 屬性
該屬性用于獲取時期對象的頻率,只不過 freqstr 屬性獲取的是縮寫的字母。
# 導入 pandas 數據包
import pandas as pd
period_res = pd.Period('2017-12', freq = '2D')
print(period_res.freq)
# --- 輸出結果 ---
<2 * Days>
print(period_res.freqstr)
# --- 輸出結果 ---
2D
結果解析:這里要注意的是在我們的頻率前面還有一個 數字 2,因為我們設置的是頻率是 2D,表示兩天為單位。
3. year 、month 和 day 屬性
這三個屬性分別用于獲取時期的哪一年,一年中的第幾個月,一個月中的第幾天。
# 導入 pandas 數據包
import pandas as pd
period_res = pd.Period('2017-12', freq = '2D')
print(period_res.year)
print(period_res.month)
print(period_res.day)
# --- 輸出結果 ---
2017 # 年
12 #月
1 #日
4. weekofyear 和 dayofweek 屬性
這兩個屬性分別用于獲取時期是一年中的第幾周,一周中的周幾(0 表示周 1)。
# 導入 pandas 數據包
import pandas as pd
period_res = pd.Period('2020-12-4', freq = '2D')
print(period_res.weekofyear)
print(period_res.dayofweek)
# --- 輸出結果 ---
49 # 2020年的第49周
4 # 從0開始,4表示周五
5. now () 方法
獲取當前的時間,可以通過指定方法中的頻率,獲取當前時期對象。
# 導入 pandas 數據包
import pandas as pd
period_res = pd.Period('2020-12-4', freq = '3D')
print(period_res.now(freq='D'))
# --- 輸出結果 ---
2021-01-11
6. asfreq () 方法
該方法用于時期頻率的轉換。
# 導入 pandas 數據包
import pandas as pd
period_res = pd.Period('2020-12', freq = 'M')
print(period_res)
print(period_res.asfreq('D'))
# --- 輸出結果 ---
2020-12 # 年為頻率的時期
2020-12-31 # 天為頻率的時期,由大頻率轉為小頻率時,默認是大頻率時期的末尾數據進行轉換,這里就是12月的最后一天轉換為頻率為 D 的數據,我們還可以通過 how='start' 來指定轉換時的依據(默認 how='end'):
print(period_res.asfreq('D',how = 'start'))
# --- 輸出結果 ---
2020-12-01
2.3 時期索引
Period 中的索引類型為 PeriodIndex,我們可以通過函數 period_range () 生成時期序列,作為其他數據集的索引。
# 導入 pandas 數據包
import pandas as pd
period_index_res = pd.period_range('2020-02-22', '2020-03-04', freq='2D')
print(period_index_res)
# --- 輸出結果 ---
PeriodIndex(['2020-02-22', '2020-02-24', '2020-02-26', '2020-02-28',
'2020-03-01', '2020-03-03'],dtype='period[2D]', freq='2D')
# 結果解析:這里可以看到生成的 PeriodIndex 序列值,我們下面將用他作為索引生成生產 DataFrame 數據集。
value_dateDataFrame = [["aa","bb"],["aa","bb"],["aa","bb"],["aa","bb"],["aa","bb"],["aa","bb"]]
res = pd.DataFrame(value_dateDataFrame, index = period_index_res)
print(res)
# --- 輸出結果 ---
0 1
2020-02-22 aa bb
2020-02-24 aa bb
2020-02-26 aa bb
2020-02-28 aa bb
2020-03-01 aa bb
2020-03-03 aa bb
# 結果解析:這里可看到 時期序列作為索引的數據結果,可以方便的通過年、月去獲取數據。
3. 小結
本節課程我們主要學習了 Pandas 時間序列的 Period ,包括時期數據對象的創建,常用的屬性和方法,以及時期索引在數據集中的具體應用。本節課程的重點如下:
- Period 時期數據創建函數 Period () 的使用;
- Period 時期對象常用屬性和方法的應用;
- Period 時期索引的應用。