pandas-时间序列与日期用法(三)

本节介绍时间索引(DatetimeIndex)

DatetimeIndex 主要用作 pandas 对象的索引。DatetimeIndex 类为时间序列做了很多优化:

  • 预计算了各种偏移量的日期范围,并在后台缓存,让后台生成后续日期范围的速度非常快(仅需抓取切片)。
  • 在 pandas 对象上使用 shift 与 tshift 方法进行快速偏移。
  • 合并具有相同频率的重叠 DatetimeIndex 对象的速度非常快(这点对快速数据对齐非常重要)。
  • 通过 yearmonth 等属性快速访问日期字段。
  • snap 等正则函数与超快的 asof 逻辑。

DatetimeIndex 对象支持全部常规 Index 对象的基本用法,及一些列简化频率处理的高级时间序列专有方法。

1. DatetimeIndex 可以当作常规索引,支持选择、切片等方法。pandas-时间序列与日期用法(三)_第1张图片局部字符串索引,能解析为时间戳的日期与字符串可以作为索引的参数:pandas-时间序列与日期用法(三)_第2张图片

pandas 为访问较长的时间序列提供了便捷方法,年月字符串均可:pandas-时间序列与日期用法(三)_第3张图片 

2. 带 DatetimeIndex 的 DateFrame 也支持这种切片方式。

局部字符串是标签切片的一种形式,这种切片也包含截止时点,即,与日期匹配的时间也会包含在内:pandas-时间序列与日期用法(三)_第4张图片

 下列代码截取了自 1 月 1 日凌晨起,至 2 月 28 日午夜的日期与时间。pandas-时间序列与日期用法(三)_第5张图片

下列代码截取了包含截止日期及其时间在内的日期与时间。pandas-时间序列与日期用法(三)_第6张图片 

 下列代码指定了精准的截止时间,注意此处的结果与上述截取结果的区别:pandas-时间序列与日期用法(三)_第7张图片

截止时间是索引的一部分,包含在截取的内容之内:pandas-时间序列与日期用法(三)_第8张图片 

3. 切片 vs. 精准匹配 

 基于索引的精度,字符串既可用于切片,也可用于精准匹配。字符串精度比索引精度低,就是切片,比索引精度高,则是精准匹配。

下例中的时间戳字符串没有 Series 对象的精度高。series_minute 到,时间戳字符串只到 精度为分钟(或更高精度)的时间戳字符串,给出的是标量,不会被当作切片。

索引的精度为秒时,精度为分钟的时间戳返回的是 Seriespandas-时间序列与日期用法(三)_第9张图片 用时间戳字符串切片时,还可以用 [] 索引 DataFrame

注意:DatetimeIndex 精度不能低于日。pandas-时间序列与日期用法(三)_第10张图片 4. 精确索引

正如上节所述,局部字符串依靠时间段的精度索引 DatetimeIndex,即时间间隔与索引精度相关。反之,用 Timestamp 或 datetime 索引更精准,这些对象指定的时间更精确。注意,精确索引包含了起始时点。

就算没有显式指定,Timestamp 与datetime 也支持 hoursminutesseconds,默认值为 0。

pandas-时间序列与日期用法(三)_第11张图片

 5. 截取与花式索引

 truncate()便捷函数与切片类似。注意,与切片返回的是部分匹配日期不同, truncate 假设 DatetimeIndex 里未标明时间组件的值为 0。pandas-时间序列与日期用法(三)_第12张图片

花式索引返回的是 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 逻辑判断是不是日期所在年是不是闰年

你可能感兴趣的:(pandas的那些事,pandas)