Timedelta表示两个时间点之间的持续时间,精度可达纳秒,支持与时间戳、数值的复合运算。
1. 创建时间差
从字符串创建
import pandas as pd
pd.Timedelta('1 day') # 1 days
pd.Timedelta('2 hours 30 minutes') # 2 hours 30 minutes
pd.Timedelta('1 days 00:00:01') # 1 days 00:00:01从数值和单位创建
pd.Timedelta(10, unit='h') # Timedelta('0 days 10:00:00')
pd.Timedelta(3600, unit='s') # Timedelta('1 days 00:00:00')? 注意:3600秒=1小时
# 实际:pd.Timedelta(3600, unit='s') => Timedelta('0 days 01:00:00')
pd.Timedelta(1.5, unit='d') # Timedelta('1 days 12:00:00')使用关键字参数
pd.Timedelta(days=1, hours=2, minutes=30, seconds=10)从 Python timedelta 创建
from datetime import timedelta
pd.Timedelta(timedelta(days=2, hours=3))批量转换:pd.to_timedelta()
s = pd.Series(['1 day', '2 days', '3 hours'])
td_series = pd.to_timedelta(s)
pd.to_timedelta([1, 2, 3], unit='h')2. 时间差属性
| 属性 | 说明 |
|---|---|
.days | 整日数 |
.seconds | 秒数(0~86399) |
.microseconds | 微秒数(0~999999) |
.nanoseconds | 纳秒数(0~999) |
.components | 各分量(天、时、分、秒、毫秒、微秒、纳秒) |
.value | 总纳秒数(整数) |
.total_seconds() | 总秒数(浮点) |
td = pd.Timedelta(days=1, hours=2, minutes=30, seconds=45)
td.days # 1
td.seconds # 9045 (2h30m45s)
td.total_seconds()# 95445.0
td.components
# Components(days=1, hours=2, minutes=30, seconds=45, milliseconds=0, microseconds=0, nanoseconds=0)3. 时间差运算
td1 = pd.Timedelta(days=2)
td2 = pd.Timedelta(hours=12)
td1 + td2 # 2 days 12:00:00
td1 - td2 # 1 days 12:00:00
td1 * 3 # 6 days
td1 / 2 # 1 days 00:00:00与时间戳运算
ts = pd.Timestamp('2024-01-01')
ts + pd.Timedelta(days=5) # 2024-01-06
ts - pd.Timedelta(hours=1) # 2023-12-31 23:00:00与数值运算(以 ns 为基准)
# 1 小时 = 3600 秒
pd.Timedelta(1, unit='h') / 60 # Timedelta('0 days 00:01:00')4. 时间差索引(TimedeltaIndex)
idx = pd.timedelta_range(start='1 day', periods=3, freq='D')
# TimedeltaIndex(['1 days', '2 days', '3 days'], dtype='timedelta64[ns]', freq='D')
df = pd.DataFrame({'值': [10, 20, 30]}, index=idx)常用属性/方法
df.index.days # Index([1, 2, 3])
df.index.total_seconds() # Float64Index([86400.0, 172800.0, 259200.0])
df.index.to_pytimedelta() # 转为 Python timedelta 数组5. 时间差常用方法
| 方法 | 说明 |
|---|---|
.total_seconds() | 总秒数 |
.round(freq) | 四舍五入到频率 |
.floor(freq) | 向下取整 |
.ceil(freq) | 向上取整 |
.to_pytimedelta() | 转 Python timedelta |
.to_numpy() | 转 NumPy 数组 |
td = pd.Timedelta('1 day 03:45:00')
td.round('h') # 1 days 04:00:00
td.floor('h') # 1 days 03:00:00
td.ceil('h') # 1 days 04:00:00小结
Timedelta表示持续时间,支持多种创建方式- 常用属性:
days、seconds、components- 可与时间戳、数值、自身进行运算
TimedeltaIndex适合作为相对时间索引