Pandas 時間序列之 Timestamp
1. 前言
上一小節,我們了解了 Pandas 庫中時間序列的特點和三類常用時間序列的類型,從本小節開始,我們將針對每一類時間序列展開詳細的學習,本小節我們將學習時間序列之時間戳 (Timestamp) 的詳細特點和創建方法。
2. 時間戳
時間戳表示特定的時間點,在 Pandas 中的提供了時間戳數據類型 Timestamp 。
2.1 時間戳的創建方法
Pandas 庫中提供了函數供時間戳的創建,其中有幾個常用參數,我們這在這里列舉一下:
pd.Timestamp(ts_input, freq=None, tz=None, unit=None,year=None, month=None, day=None, hour=None, minute=None,second=None, microsecond=None, nanosecond=None, tzinfo=None)
參數名 | 說明 |
---|---|
ts_input | 要轉換為時間戳的值 |
tz | 時區,如 tz=‘Asia/Shanghai’ 上海時區 |
year、month、day | 年、月、日 |
hour、minute、second、microsecond、nanosecond | 時、分、秒、微秒、納秒 |
下面我們通過代碼展示一下 Timestamp () 函數創建時間戳的操作:
# 導入 pandas 數據包
import pandas as pd
date_res=pd.Timestamp("2020-12-23")
print(date_res)
print(type(date_res))
# --- 輸出結果 ---
2020-12-23 00:00:00
<class 'pandas._libs.tslibs.timestamps.Timestamp'>
# 結果解析:這里我們通過直接傳一個字符串的日期數據,Timestamp() 函數會創建一個時間戳數據
date_res=pd.Timestamp(year=2021,month=1,day=3,hour=12,minute=23,second=22)
print(date_res)
print(type(date_res))
# --- 輸出結果 ---
2021-01-03 12:00:22
<class 'pandas._libs.tslibs.timestamps.Timestamp'>
# 結果解析:這里我們通過指定年月日時分秒,生成一個時間戳,如果我們不指定對應的數值,默認是 0
2.2 時間戳常用的屬性和方法
Pandas 時間戳對象中提供了豐富的屬性,便于對時間戳的處理,這里我們通過代碼具體演示幾個常用的屬性和方法。
1. weekofyear 屬性
獲取該時間戳在當年的第多少周
date_res=pd.Timestamp("2020-3-17",tz='Asia/Shanghai')
print(date_res.weekofyear)
# --- 輸出結果 ---
12
2. dayofyear 屬性
獲取該時間是一年的第多少天
date_res=pd.Timestamp("2021-1-6",tz='Asia/Shanghai')
print(date_res.dayofyear)
# --- 輸出結果 ---
6
3. is_year_end 屬性
獲取該時間戳是否是一年的最后一天
date_res=pd.Timestamp("2021-1-6",tz='Asia/Shanghai')
print(date_res.is_year_end)
# --- 輸出結果 ---
False
4. now() 方法
獲取當前時間的方法
date_res=pd.Timestamp("2020-3-17",tz='Asia/Shanghai')
print(date_res.now())
# --- 輸出結果 ---
2021-01-06 21:30:08.051878
5. day_name() 方法
獲取時間戳是星期幾名字的方法
date_res=pd.Timestamp("2021-1-6",tz='Asia/Shanghai')
print(date_res.day_name())
# --- 輸出結果 ---
Wednesday
6. isocalendar() 方法
獲取時間戳是那一年,這一年的第幾周,周幾這三個值
date_res=pd.Timestamp("2021-1-6",tz='Asia/Shanghai')
print(date_res.isocalendar())
# --- 輸出結果 ---
(2021, 1, 3)
2.3 時間戳索引
上面我講到的時間戳,在放到數據集中,我們可以將其作為時間戳索引,便于我們在時間基礎上對數據的處理和分析,時間戳作為索引序列對應的對應的類型是 DatetimeIndex ,它可以用于 Series 和 DataFrame 的數據集中。下面我們通過構造一組 Series 數據,來進行演示創建時間索引 DatetimeIndex 和時間索引數據的查找特點:
# 導入 pandas 數據包
import pandas as pd
df_data=pd.Series([786,890,977,912,825,586], index=['2017-04-12','2017-05-17','2018-04-12','2020-05-16','2018-05-12','2020-04-12'])
print(df_data)
# --- 輸出結果 ---
2017-04-12 786
2017-05-17 890
2018-04-12 977
2020-05-16 912
2018-05-12 825
2020-04-12 586
dtype: int64
輸出解析:這里看到我們的數據索引是一組年月日的數據格式,但他們的數據類型并不是時間序列,而是字符串。這里我們要用到 DatetimeIndex () 函數將一組數據轉換為時間戳索引:
# 通過 DatetimeIndex() 函數 轉換為時間戳索引
index_date=pd.DatetimeIndex(['2017-04-12','2017-05-17','2018-04-12','2020-05-16',
'2018-05-12','2020-04-12'])
df_data=pd.Series([786,890,977,912,825,586],index=index_date)
print(df_data)
# --- 輸出結果 ---
2017-04-12 786
2017-05-17 890
2018-04-12 977
2020-05-16 912
2018-05-12 825
2020-04-12 586
dtype: int64
# 結果解析:在輸出結果上和之前沒有什么區別,但這里我們能方便的對數據的時間索引進行查找操作,可以直接獲得某一年的數據:
print(df_data['2017'])
# --- 輸出結果 ---
2017-04-12 786
2017-05-17 890
dtype: int64
除了上面通過 DatetimeIndex () 函數創建時間戳索引,我們還可以通過 date_range () 函數來生成時間戳索引,具體操作如下:
# 導入 pandas 數據包
import pandas as pd
index_date=pd.date_range(start="2020-12-20 01:00:00",end="2020-12-20 12:00:00",freq="2H")
series_data=pd.Series([786,890,977,912,825,586],index=index_date)
print(series_data)
# --- 輸出結果 ---
2020-12-20 01:00:00 786
2020-12-20 03:00:00 890
2020-12-20 05:00:00 977
2020-12-20 07:00:00 912
2020-12-20 09:00:00 825
2020-12-20 11:00:00 586
Freq: 2H, dtype: int64
3. 小結
本節課程我們主要學習了 Pandas 庫中的時間戳,表示具體的時間點,學習如何創建一個時間戳,時間戳中常用的方法和屬性,以及時間戳索引的相關知識。本節課程的重點如下:
- 創建時間戳,以及時間戳中常用的方法和屬性;
- 時間戳索引的特點,以及如何將時間數據轉換為時間戳索引。