日期范围、频率和移位


日期范围、频率和移位

pandas的通用时间序列是不规则的,即时间序列的频率不是固定的。经常有需要处理固定频率的场景,例如每日的、每月的或每15分钟,这意味着需要在必要的时候向时间序列中引入缺失值。pandas拥有一整套标准的时间序列频率和工具用于重新采样、推断频率以及生成固定频率的数据范围。

字符串’D’被解释为每日频率。在频率间转换,又称为重新采样。

1、生成日期范围

pandas.date_range是用于根据特定频率生成指定长度的DatetimeIndex:

默认情况下,date_range生成的是每日的时间戳。如果只传递一个起始或结尾日期,必须传递一个用于生成范围的数字:

开始日期和结束日期严格定义了生成日期索引的边界。

默认情况下,date_range保留开始或结束时间戳的时间:

有时候会获得包含时间信息的开始日期或结束日期,但是想要生成的是标准化为零点的时间戳。有一个normalize选项可以实现这个功能:

2、频率和日期偏置

pandas中的频率是由基础频率和倍数组成的。基础频率通常会有字符串别名,例如’M’代表每月,’H’代表每小时。对于每个基础频率,都有一个对象可以被用于定义日期偏置。

可以传递一个整数来定义偏置量的倍数:

在大多数应用中,都不需要显式地创建这些对象,而是使用字符串别名,如’H’或’4H’。在基础频率前放一个整数就可以生成倍数:

类似地,可以传递频率字符串,例如’1h30min’将会有效地转换为同等的表达式:

2.1 月中某星期的日期

“月中某星期”(week of month )的日期是一个有用的频率类,以’WOM’开始。它允许你可以获取每月第三个星期五这样的日期:

3、移位(前向和后向)日期

“移位”是指将日期按时间向前移动或向后移动。Series和DataFrame都有一个shift方法用于进行简单的前向或后向移位,而不改变索引:

由于简单移位并不改变索引,一些数据会被丢弃。因此,如果频率是已知的,则可以将频率传递给shift来推移时间戳而不是简单的数据:

3.1 使用偏置进行移位日期

pandas日期偏置也可以使用datetime或Timestamp对象完成:

如果添加了一个锚定偏置量,比如MonthEnd,根据频率规则,第一个增量会将日期“前滚”到下一个日期:

锚定偏置可以使用rollforward和rollback分别显式地将日期向前或向后”滚动”: