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

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. daysseconds 屬性

這兩個屬性分別返回時間段的天數和轉換后的秒數。

# 導入 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 時間增量索引的創建方法。

圖片描述