学科分类
目录
数据分析

时间序列的频率、偏移量

通常,默认生成的时间序列数据是按天计算的,即频率为“D”。“D”是一个基础频率,通过用一个字符串的别名表示,比如“D”是“day”的别名。Pandas中的频率是由一个基础频率和一个乘数组成的,比如,“5D”表示每5天。

接下来,通过一张表来列举时间序列的基础频率,如表1所示。

表1 时间序列的基础频率

别名 说明
D 每日历日
B 每工作日
H 每小时
T或min 每分
S 每秒
L或ms 每毫秒
U 每微秒
M 每月最后一个日历日
BM 每月最后一个工作日
MS 每月第一个日历日
BMS 每月第一个工作日
W-MON、W-TUE… 从指定的星期几(MON、TUE、WED、THU、FRI、SAT、SUN)开始算起,每周几
WOM-1MON、WOM-2MON… 每月第一周、第二周、第三周或第四周的星期几。
Q-JAN、Q-FEB… 对于以指定月份(JAN、FEB、MAR、APR、MAY、JUN、JUL、AUG、SEP、OCT、NOV、DEC)结束的年度,每季度最后一月的最后一个日历日
BQ-JAN、BQ-FEB… 对于以指定月份结束的年度,每季度最后一月的最后一个工作日
QS-JAN、QS- FEB… 对于以指定月份结束的年度,每季度最后一月的最后一个日历日
BQS-JAN、BQS- FEB… 对于以指定月份结束的年度,每季度最后一月的第一个工作日
A-JAN、A- FEB… 每年指定月份的最后一个日历日
BA-JAN、BA- FEB… 每年指定月份的最后一个工作日
AS-JAN、AS- FEB… 每年指定月份的第一个日历日
BAS-JAN、BAS - FEB… 每年指定月份的第一个工作日

为了更好地理解,接下来,通过一个示例来演示如何设置DatetimeIndex对象的频率,示例代码如下。

In [24]: pd.date_range(start='2018/2/1', end='2018/2/28', freq='5D')
Out[24]: 
DatetimeIndex(['2018-02-01', '2018-02-06', '2018-02-11', '2018-02-16',
​          '2018-02-21', '2018-02-26'],
​         dtype='datetime64[ns]', freq='5D')

上述示例中,创建了一个固定频率的DatetimeIndex对象,该对象的起始日期为2018-02-01,结束日期为2018-02-06,频率为5D,说明每5天采集一次数据。

从输出结果看出,生成的第一个时间戳为2018-02-01,第二个时间戳为2018-02-06,第三个时间戳为2018-02-11......每个时间戳的间隔都是5天。

除此之外,每个基础频率还可以跟着一个被称为日期偏移量的DateOffset对象。如果想要创建一个DateOffset对象,则需要先导入pd.tseries.offsets模块后才行。比如,创建14天10小时的偏移量,具体代码如下。

In [25]: from pandas.tseries.offsets import *
         DateOffset(months=4, days=5)
Out[25]: <DateOffset: days=5, months=4>

还可以使用offsets模块中提供的偏移量类型进行创建。例如,创建14天10小时的偏移量,可以换算为两周零十个小时,其中“周”使用Week类型表示的,“小时”使用Hour类型表示,它们之间可以使用加号连接,示例代码如下。

In [26]: Week(2) + Hour(10)
Out[26]: Timedelta('14 days 10:00:00')

上述代码创建了一个Timedelta类对象,该对象用来表示持续时间,两个日期或时间之间的差异。

接下来,通过一个示例来演示如何使用日期偏移量创建DatetimeIndex对象,示例代码如下。

In [27]: # 生成日期偏移量
         date_offset  = Week(2) + Hour(10)
         pd.date_range('2018/3/1', '2018/3/31', freq=date_offset)
Out[27]: DatetimeIndex(['2018-03-01 00:00:00', '2018-03-15 10:00:00',
​               '2018-03-29 20:00:00'],
​               dtype='datetime64[ns]', freq='346H')

上述示例中,创建了一个DatetimeIndex对象,它是从2018-03-01 00:00:00开始算起的,到2018-03-31 00:00:00结束,并且每隔14天10小时计算一次

从输出结果可以看出,第一个时间戳为2018-03-01 00:00:00,第二个时间戳为2018-03-15 10:00:00,正好相差了14天10个小时,依此类推。

点击此处
隐藏目录