Timestamp是 pandas 中表示单个时间点的对象,精度可达纳秒,并支持丰富的属性提取、运算与时区处理。
1. 创建时间戳
从字符串创建
import pandas as pd
ts = pd.Timestamp('2024-01-01') # 2024-01-01 00:00:00
ts2 = pd.Timestamp('2024-01-01 12:30:45') # 2024-01-01 12:30:45
ts3 = pd.Timestamp('2024/01/01') # 自动识别分隔符从 Python datetime 创建
from datetime import datetime
ts = pd.Timestamp(datetime(2024, 3, 15, 10, 30))从数值创建(Unix 时间戳)
ts = pd.Timestamp(1700000000, unit='s') # 秒
ts = pd.Timestamp(1700000000000, unit='ms') # 毫秒
ts = pd.Timestamp(1700000000000000, unit='ns')批量转换:pd.to_datetime()
s = pd.Series(['2024-01-01', '2024-02-01'])
ts_series = pd.to_datetime(s)
# 处理错误
pd.to_datetime(['2024-01-01', '错误'], errors='coerce') # 无效转 NaT2. 时间戳属性
日期组件
| 属性 | 说明 | 示例(2024-03-15 12:30:45) |
|---|---|---|
.year | 年 | 2024 |
.month | 月 | 3 |
.day | 日 | 15 |
.hour | 时 | 12 |
.minute | 分 | 30 |
.second | 秒 | 45 |
.microsecond | 微秒 | 0 |
.nanosecond | 纳秒 | 0 |
日历组件
| 属性 | 说明 | 示例结果 |
|---|---|---|
.dayofweek | 星期几(0=周一) | 4(周五) |
.day_of_week | 同上 | 4 |
.weekday | 同上 | 4 |
.dayofyear | 一年中第几天 | 75 |
.day_of_year | 同上 | 75 |
.quarter | 季度 | 1 |
.is_leap_year | 是否闰年 | True |
.days_in_month | 当月天数 | 31 |
.weekofyear | 一年中第几周 | 12 |
ts = pd.Timestamp('2024-03-15 12:30:45')
print(ts.year) # 2024
print(ts.month) # 3
print(ts.day) # 15
print(ts.quarter) # 1
print(ts.dayofweek) # 4
print(ts.is_leap_year) # True3. 时间戳方法
| 方法 | 说明 |
|---|---|
.strftime(format) | 格式化为字符串 |
.date() | 返回日期部分(datetime.date) |
.time() | 返回时间部分(datetime.time) |
.normalize() | 归一到午夜 |
.replace(...) | 替换指定字段 |
.round(freq) | 四舍五入到指定频率 |
.floor(freq) | 向下取整 |
.ceil(freq) | 向上取整 |
.to_period(freq) | 转换为周期 |
.tz_localize(tz) | 本地化时区 |
.tz_convert(tz) | 转换时区 |
.timestamp() | 返回 Unix 时间戳(秒) |
.isocalendar() | 返回 (ISO年, ISO周, ISO日) |
ts = pd.Timestamp('2024-03-15 12:30:45')
ts.strftime('%Y/%m/%d %H:%M:%S') # '2024/03/15 12:30:45'
ts.strftime('%Y年%m月%d日') # '2024年03月15日'
ts.round('D') # 2024-03-15 00:00:00
ts.floor('h') # 2024-03-15 12:00:00
ts.ceil('D') # 2024-03-16 00:00:00
ts.replace(day=1, hour=0) # 2024-03-01 00:00:00
ts.to_period('M') # 2024-034. 时间戳运算
ts1 = pd.Timestamp('2024-01-01')
ts2 = pd.Timestamp('2024-01-10')
# 时间差
delta = ts2 - ts1 # Timedelta('9 days')
# 加减时间差
ts1 + pd.Timedelta(days=3) # 2024-01-04
ts1 - pd.Timedelta(hours=5) # 2023-12-31 19:00
# 加减日期偏移(日历运算)
ts1 + pd.DateOffset(months=1) # 2024-02-01
ts1 + pd.DateOffset(years=1) # 2025-01-01
# 比较运算
ts1 < ts2 # True
ts1 == ts2 # False
DateOffset与Timedelta的区别
Timedelta表示固定时长(如 24 小时)DateOffset表示日历单位(如 1 个月,可能跨月时天数不同)
5. 时间戳与其他类型转换
# 转 Python datetime
dt = ts.to_pydatetime()
# 转字符串
s = ts.isoformat() # '2024-03-15T12:30:45'
# 转周期
p = ts.to_period('M') # 2024-03
# 转 NumPy datetime64
np_ts = ts.to_datetime64()小结
Timestamp是 pandas 的核心时间点对象- 提供大量日期组件属性与日历属性
- 支持
strftime、round、floor、ceil等格式化方法- 可与
Timedelta、DateOffset、Period灵活运算