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')  # 无效转 NaT

2. 时间戳属性

日期组件

属性说明示例(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)  # True

3. 时间戳方法

方法说明
.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-03

4. 时间戳运算

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 灵活运算