[ Pandas version: 1.0.1 ]
十一、处理时间序列
本文涉及的日期与时间数据主要包含三类:
- 时间戳:表示某个具体的时间点
- 时间间隔与周期:表示开始时间点与结束时间点之间的时间长度,周期通常指一种特殊形式的时间间隔,每个间隔长度相同,彼此之间不会重叠
- 时间增量(time delta)或持续时间(duration):表示精确的时间长度
(一)Python的日期与时间工具
在Python标准库与第三方库中有许多可以表示日期、时间、时间增量和时间跨度(timespan)的工具,尽管Pandas提供的时间序列工具更适合处理数据科学问题,但了解Pandas与Python标准库以及第三方库中的其他时间序列工具之间的关联性将大有裨益。
(1) 原生的Python日期与时间工具:datetime
与dateutil
Python基本的日期与时间功能都在标准库的datetime
模块中,如果和第三方库dateutil
模块搭配使用,可以快速实现许多处理日期与时间的功能。
优缺点:datetime
和dateutil
模块在灵活性和易用性方面都表现出色,但如果处理的时间数据量比较大,速度会比较慢。
# 用datetime类型创建日期
from datetime import datetime
datetime(year=2020, month=5, day=8)
# datetime.datetime(2020, 5, 8, 0, 0)
# 使用dateutil模块对各种字符串格式的日期进行解析
from dateutil import parser
date = parser.parse("8th of May, 2020")
date
# datetime.datetime(2020, 5, 8, 0, 0)
# 打印date是星期几
date.strftime('%A')
# 'Friday'
(2) 时间类型数组:NumPy的datetime64
类型
datetime64
类型将日期编码为64位整数,使日期数组更节省内存,datetime64
需要在设置日期时确定具体的输入类型
import numpy as np
date = np.array('2020-05-08', dtype=np.datetime64)
date
# array('2020-05-08', dtype='datetime64[D]')
# 可以进行快速的向量化运算
date + np.arange(12)
# array(['2020-05-08', '2020-05-09', '2020-05-10', '2020-05-11',
# '2020-05-12', '2020-05-13', '2020-05-14', '2020-05-15',
# '2020-05-16', '2020-05-17', '2020-05-18', '2020-05-19'],
# dtype='datetime64[D]')
datetime64
是在基本时间单位(fundamental time unit)的基础上建立的,可编码的时间范围是基本单元的 2 64 2^{64} 264倍,在时间精度(time resolution)与最大时间跨度(maximum time span)之间达成一种平衡。
时区将自动设置为执行代码的操作系统的当地时区,可以通过各种格式的代码设置基本时间单位
# 以天为单位的日期
np.datetime64('2020-05-08')
# numpy.datetime64('2020-05-08'