说明
对于
datetime64、timedelta64、period类型的 Series,可通过.dt访问器提取时间组件,返回一个普通 Series(或布尔/类别 Series)。
import pandas as pd
s = pd.Series(pd.date_range('2026-08-19 13:05:30', periods=3, freq='D'))
print(s.dt)
# <pandas.core.accessor.PandasDelegate object>日期组件
说明
提取时间戳的各组成部分。
print(s.dt.year) # 0 2026 ...
print(s.dt.month) # 0 8 ...
print(s.dt.day) # 0 19 ...
print(s.dt.hour) # 0 13 ...
print(s.dt.minute) # 0 5 ...
print(s.dt.second) # 0 30 ...
print(s.dt.microsecond) # 0 0 ...
print(s.dt.nanosecond) # 0 0 ...日历属性
说明
提取星期、年积日、季度、月天数等日历信息。
print(s.dt.week) # 周序号(已弃用,建议用 isocalendar)
print(s.dt.weekofyear) # 周序号别名(已弃用)
print(s.dt.dayofyear) # 0 231 ...
print(s.dt.day_of_year) # 与 dayofyear 相同
print(s.dt.quarter) # 0 3 ...
print(s.dt.days_in_month) # 0 31 ...
print(s.dt.daysinmonth) # 与 days_in_month 相同弃用提示
s.dt.week与s.dt.weekofyear已在 pandas 2.x 弃用,请改用s.dt.isocalendar().week。
星期属性
print(s.dt.dayofweek) # 0 2(周一=0 ... 周日=6)
print(s.dt.day_of_week) # 与 dayofweek 相同
print(s.dt.weekday) # 与 dayofweek 相同判断属性
说明
返回布尔 Series,判断该时间是否处于某个日历边界。
print(s.dt.is_month_start) # 是否月初
print(s.dt.is_month_end) # 是否月末
print(s.dt.is_quarter_start) # 是否季初
print(s.dt.is_quarter_end) # 是否季末
print(s.dt.is_year_start) # 是否年初
print(s.dt.is_year_end) # 是否年末
print(s.dt.is_leap_year) # 是否闰年方法
说明
.dt提供多种转换与格式化方法。
| 方法 | 说明 | 适用类型 |
|---|---|---|
date() | 返回 datetime.date 对象 | datetime |
time() | 返回 datetime.time 对象 | datetime |
timetz() | 返回带时区的 datetime.time 对象 | datetime |
tz | 返回时区信息 | datetime |
freq | 返回频率对象 | datetime / period |
freqstr | 返回频率字符串 | datetime / period |
strftime(fmt) | 按格式输出字符串 | datetime / period |
round(freq) | 按频率取整(四舍五入) | datetime / timedelta |
floor(freq) | 按频率向下取整 | datetime / timedelta |
ceil(freq) | 按频率向上取整 | datetime / timedelta |
month_name() | 返回月份名称(如 'August') | datetime |
day_name() | 返回星期名称(如 'Wednesday') | datetime |
to_period(freq) | 转换为 Period | datetime |
to_pydatetime() | 转 Python datetime 对象 | datetime / timedelta |
normalize() | 时间归一到 0 点 | datetime |
components | 返回时间差各组件 DataFrame | timedelta |
total_seconds() | 返回总秒数 | timedelta |
to_timestamp() | 转换为时间戳 | period |
示例
# datetime 方法
print(s.dt.date())
print(s.dt.time())
print(s.dt.strftime('%Y-%m-%d %H:%M'))
print(s.dt.round('D'))
print(s.dt.floor('h'))
print(s.dt.ceil('D'))
print(s.dt.month_name())
print(s.dt.day_name())
print(s.dt.to_period('M'))
print(s.dt.normalize())
# timedelta 方法
td = pd.Series(pd.to_timedelta(['1 days 02:00:00', '2 days 04:00:00']))
print(td.dt.components)
# days hours minutes seconds milliseconds microseconds nanoseconds
# 0 1 2 0 0 0 0 0
# 1 2 4 0 0 0 0 0
print(td.dt.total_seconds())
# 0 93600.0
# 1 187200.0
# period 数据
p = pd.Series(pd.period_range('2026-01', periods=2, freq='M'))
print(p.dt.to_timestamp())
print(p.dt.freqstr)🔗 相关链接
- 9.1 时间对象 - 时间对象的基础概念
- 9.3 时间索引 - 索引上的同类属性(DatetimeIndex.year 等)
- 9.5 时间序列操作 - 时间序列的进一步处理