亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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 時期索引的應用。

圖片描述