本节介绍时间索引(DatetimeIndex)
DatetimeIndex
主要用作 pandas 对象的索引。DatetimeIndex
类为时间序列做了很多优化:
shift
与 tshift
方法进行快速偏移。DatetimeIndex
对象的速度非常快(这点对快速数据对齐非常重要)。year
、month
等属性快速访问日期字段。snap
等正则函数与超快的 asof
逻辑。DatetimeIndex
对象支持全部常规 Index
对象的基本用法,及一些列简化频率处理的高级时间序列专有方法。
1. DatetimeIndex
可以当作常规索引,支持选择、切片等方法。局部字符串索引,能解析为时间戳的日期与字符串可以作为索引的参数:
pandas 为访问较长的时间序列提供了便捷方法,年、年月字符串均可:
2. 带 DatetimeIndex
的 DateFrame
也支持这种切片方式。
局部字符串是标签切片的一种形式,这种切片也包含截止时点,即,与日期匹配的时间也会包含在内:
下列代码截取了自 1 月 1 日凌晨起,至 2 月 28 日午夜的日期与时间。
下列代码指定了精准的截止时间,注意此处的结果与上述截取结果的区别:
3. 切片 vs. 精准匹配
基于索引的精度,字符串既可用于切片,也可用于精准匹配。字符串精度比索引精度低,就是切片,比索引精度高,则是精准匹配。
下例中的时间戳字符串没有 Series
对象的精度高。series_minute
到秒
,时间戳字符串只到分
精度为分钟(或更高精度)的时间戳字符串,给出的是标量,不会被当作切片。
索引的精度为秒时,精度为分钟的时间戳返回的是 Series
。 用时间戳字符串切片时,还可以用 []
索引 DataFrame
注意:DatetimeIndex
精度不能低于日。 4. 精确索引
正如上节所述,局部字符串依靠时间段的精度索引 DatetimeIndex
,即时间间隔与索引精度相关。反之,用 Timestamp
或 datetime
索引更精准,这些对象指定的时间更精确。注意,精确索引包含了起始时点。
就算没有显式指定,Timestamp
与datetime
也支持 hours
、minutes
、seconds
,默认值为 0。
5. 截取与花式索引
truncate()便捷函数与切片类似。注意,与切片返回的是部分匹配日期不同, truncate
假设 DatetimeIndex
里未标明时间组件的值为 0。
花式索引返回的是 DatetimeIndex
, 但因为打乱了 DatetimeIndex
的频率,所以频率信息没有了,见 freq=None
:
6. 日期/时间组件
以下日期/时间属性可以访问 Timestamp
或 DatetimeIndex
。
属性 | 说明 |
---|---|
year | datetime 的年 |
month | datetime 的月 |
day | datetime 的日 |
hour | datetime 的小时 |
minute | datetime 的分钟 |
second | datetime 的秒 |
microsecond | datetime 的微秒 |
nanosecond | datetime 的纳秒 |
date | 返回 datetime.date(不包含时区信息) |
time | 返回 datetime.time(不包含时区信息) |
timetz | 返回带本地时区信息的 datetime.time |
dayofyear | 一年里的第几天 |
weekofyear | 一年里的第几周 |
week | 一年里的第几周 |
dayofweek | 一周里的第几天,Monday=0, Sunday=6 |
weekday | 一周里的第几天,Monday=0, Sunday=6 |
weekday_name | 这一天是星期几 (如,Friday) |
quarter | 日期所处的季节:Jan-Mar = 1,Apr-Jun = 2 等 |
days_in_month | 日期所在的月有多少天 |
is_month_start | 逻辑判断是不是月初(由频率定义) |
is_month_end | 逻辑判断是不是月末(由频率定义) |
is_quarter_start | 逻辑判断是不是季初(由频率定义) |
is_quarter_end | 逻辑判断是不是季末(由频率定义) |
is_year_start | 逻辑判断是不是年初(由频率定义) |
is_year_end | 逻辑判断是不是年末(由频率定义) |
is_leap_year | 逻辑判断是不是日期所在年是不是闰年 |