Pandas 時間序列之 Timedelta
1. 前言
上一小節我們學習了時間序列的時期類型 Period ,表示具體的一個時間區間,以及我們上上一節學習的時間戳類型 Timestamp 表示具體的時間點,除了這兩種常用的時間序列類型,今天我們將學習第三種時間序列類型 —— 時間長度(Timedelta)表示的是一段持續的時長,比如我們經常計時用到的 1 分鐘,10 分鐘等待,這種時間序列類型在我們生活中也是應用較為廣泛的。
2. 時長 Timedelta
Timedelta 對象表示兩個時間之間的時間差值,下面我們來看一下如何創建 Timedelta 對象,以及它常用的屬性和方法。
2.1 Timedelta 的創建方法
Pandas 庫中提供了特定的函數用于創建 Timedelta 對象。
pd.Timedelta(value, unit=None, **kwargs)
參數名 | 說明 |
---|---|
value | 要轉換為時長的值,可以為字符串、數值等類型 |
unit | 輸入的單位,可以為 ns, us, ms, s, m, h, D ,默認是 ns |
下面我們通過代碼展示該函數的具體使用方式:
# 1.通過函數創建時間段
# 導入 pandas 數據包
import pandas as pd
pd.Timedelta(days=5, hours=12, minutes=50, seconds=20)
# --- 輸出結果 ---
Timedelta('5 days 12:50:20')
# 結果解析:我們通過函數指定時間段,5天12小時50分20秒。
# 2.unit 參數,我們通過指定該參數的單位,可以看到時間段在該單位的值
pd.Timedelta(days=5, hours=12, minutes=50, seconds=20,unit='h')
# --- 輸出結果 ---
Timedelta('5 days 12:00:00')
# 結果解析:這里可以看到我們指定單位為 ‘h’ ,在我們設置的 timedelta 中,輸出的值到12小時。
除了通過函數,我們還可以通過兩個時間戳相減得到一個時間段,如下代碼所示:
# 導入 pandas 數據包
import pandas as pd
tt_01=pd.Timestamp("2020-12-23")
tt_02=pd.Timestamp("2020-12-20")
print(tt_01-tt_02)
print(type(tt_01-tt_02))
# --- 輸出結果 ---
3 days 00:00:00
<class 'pandas._libs.tslibs.timedeltas.Timedelta'>
# 結果解析:這里我們定義了兩個時間戳,通過時間戳相減我們看到輸出的是3天,通過輸出數據類型可以看到相減之后的數據類型是 Timedelta。
2.2 時段常用的屬性和方法
Pandas 庫中對于時間段 Timedelta ,提供了豐富的屬性和方法,下面我就來列舉一下該時間序列類型中常用的屬性和方法。
1. days 和 seconds 屬性
這兩個屬性分別返回時間段的天數和轉換后的秒數。
# 導入 pandas 數據包
import pandas as pd
ss=pd.Timedelta("3 days 10:05:23")
ss.days
# --- 輸出結果 ---
3
ss=pd.Timedelta("0 days 00:01:23")
ss.seconds
# --- 輸出結果 ---
83 # 這里是1分23秒,所以合計是83秒
2. delta 屬性
該屬性可以獲得時間段轉換后的納秒數。
# 導入 pandas 數據包
import pandas as pd
ss=pd.Timedelta("0 days 00:01:23")
ss.delta
# --- 輸出結果 ---
83000000000
3. ceil() 函數
該函數通過指定固定的頻率,可以返回一個新的時間段數據值。
# 導入 pandas 數據包
import pandas as pd
ss=pd.Timedelta("12 days 10:00:00")
ss.ceil("2D")
# --- 輸出結果 ---
Timedelta('14 days 00:00:00') #通過指定2D的頻率,看到新的時間段14days
4. isoformat() 函數
該函數將時間段轉換成 ISO 8601 持續時間格式:P [n] Y [n] M [n] DT [n] H [n] M [n] S 。
# 導入 pandas 數據包
import pandas as pd
ss=pd.Timedelta("12 days 10:23:31")
ss.isoformat()
# --- 輸出結果 ---
'P12DT10H23M31S'
5. total_seconds() 函數
該函數用于計算時間段總的持續時間,單位是秒。
# 導入 pandas 數據包
import pandas as pd
ss=pd.Timedelta("12 days 10:23:31")
ss.total_seconds()
# --- 輸出結果 ---
1074211.0
2.3 時段索引
時段數據類型 Timedelta 的索引結構為 TimedeltaIndex ,我們可以通過 TimedeltaIndex () 或者 timedelta_range () 創建生成時間增量索引:
# 1、通過 TimedeltaIndex() 函數生成時間增量索引
# 通過 TimedeltaIndex() 函數定義了時間段索引
timedelta_index_res=pd.TimedeltaIndex(['1 days','1 days 12:04:23','02:00:00'])
# 將時間增量索引應用到 dataframe 數據結構中
value_dateDataFrame = [["a1","b1"],["a2","b2"],["a3","b3"]]
res = pd.DataFrame(value_dateDataFrame, index = timedelta_index_res)
print(res)
# --- 輸出結果 ---
0 1
1 days 00:00:00 a1 b1
1 days 12:04:23 a2 b2
0 days 02:00:00 a3 b3
# 2、通過 timedelta_range() 函數生成時間增量索引,該函數有 start、end、periods、freq 四個參數,在生成時間增量索引時,至少要指定三個參數。
# 通過 timedelta_range() 函數定義了時間段索引
timedelta_index_res=pd.timedelta_range(start='00:00:00',end="14:00:00", freq='5H')
# 將時間增量索引應用到 dataframe 數據結構中
value_dateDataFrame = [["a1","b1"],["a2","b2"],["a3","b3"]]
res = pd.DataFrame(value_dateDataFrame, index = timedelta_index_res)
print(res)
# --- 輸出結果 ---
0 1
0 days 00:00:00 a1 b1
0 days 05:00:00 a2 b2
0 days 10:00:00 a3 b3
3. 小結
本節課程我們主要學習了時間序列的 Timedelta 時間段數據類型,該數據類型表示具體的時間增量,是我們數據處理中常用的數據類型之一。本節課程的重點如下:
- Timedelta 對象的創建方法;
- Timedelta 對象中常用的屬性和方法;
- TimedeltaIndex 時間增量索引的創建方法。