WHCSRL 技术网

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

本节介绍自定义工作日和自定义工作时间

Cday 或 CustomBusinessDay 类可以参数化 BusinessDay 类,用于创建支持本地周末与传统节假日的自定义工作日历。

1. 下面这个例子就很有意思,知道吗?埃及的周末是星期五与星期六。

下列代码实现了日期与工作日之间的映射关系 2. 工作时间

BusinessHour 表示 BusinessDay 基础上的工作时间,用于指定开始与结束工作时间。

BusinessHour 默认的工作时间是 9:00 - 17:00。BusinessHour 加法以小时频率增加 Timestamp 。如果目标 Timestamp 超出了一小时,则要先移动到下一个工作小时,再行增加。如果超过了当日工作时间的范围,剩下的时间则添加到下一个工作日。

 还可以用关键字指定 start 与 end 时间。参数必须是hour:minute 格式的字符串或 datetime.time 实例。把秒、微秒、纳秒设置为工作时间会导致 ValueError

 start 时间晚于 end 时间表示夜班工作时间。此时,工作时间将从午夜延至第二天。工作时间是否有效取决于该时间是否开始于有效的 BusinessDay

BusinessHour.rollforward 与 rollback 操作将前滚至下一天的上班时间,或回滚至前一天的下班时间。与其它偏移量不同,BusinessHour.rollforward 输出与 apply 定义不同的结果。

这是因为一天工作时间的结束等同于第二天工作时间的开始。默认情况下,工作时间为 9:00 - 17:00,pandas 认为 2014-08-01 17:00 与 2014-08-04 09:00 之间的时间间隔为 0 分钟。

 3. 自定义工作时间

CustomBusinessHour 是 BusinessHour 和 CustomBusinessDay 的混合体,可以指定任意节假日。除了跳过自定义节假日之外,CustomBusinessHour 的运作方式与 BusinessHour 一样。

 4. 偏移量别名

时间序列频率的字符串别名在这里叫偏移量别名

别名说明
B工作日频率
C自定义工作日频率
D日历日频率
W周频率
M月末频率
SM半月末频率(15 号与月末)
BM工作日月末频率
CBM自定义工作日月末频率
MS月初频率
SMS半月初频率(1 号与 15 号)
BMS工作日月初频率
CBMS自定义工作日月初频率
Q季末频率
BQ工作日季末频率
QS季初频率
BQS工作日季初频率
A, Y年末频率
BA, BY工作日年末频率
AS, YS年初频率
BAS, BYS工作日年初频率
BH工作时间频率
H小时频率
T, min分钟频率
S秒频率
L, ms毫秒
U, us微秒
N纳秒

5. 别名组合 

别名与偏移量实例在绝大多数函数里可以互换:

可以组合日与当日偏移量。 6. 锚定偏移量

 可以指定某些频率的锚定后缀:

别名说明
W-SUN周频率(星期日),与 “W” 相同
W-MON周频率(星期一)
W-TUE周频率(星期二)
W-WED周频率(星期三)
W-THU周频率(星期四)
W-FRI周频率(星期五)
W-SAT周频率(星期六)
(B)Q(S)-DEC季频率,该年结束于十二月,与 “Q” 相同
(B)Q(S)-JAN季频率,该年结束于一月
(B)Q(S)-FEB季频率,该年结束于二月
(B)Q(S)-MAR季频率,该年结束于三月
(B)Q(S)-APR季频率,该年结束于四月
(B)Q(S)-MAY季频率,该年结束于五月
(B)Q(S)-JUN季频率,该年结束于六月
(B)Q(S)-JUL季频率,该年结束于七月
(B)Q(S)-AUG季频率,该年结束于八月
(B)Q(S)-SEP季频率,该年结束于九月
(B)Q(S)-OCT季频率,该年结束于十月
(B)Q(S)-NOV季频率,该年结束于十一月
(B)A(S)-DEC年频率,锚定结束于十二月,与 “A” 相同
(B)A(S)-JAN年频率,锚定结束于一月
(B)A(S)-FEB年频率,锚定结束于二月
(B)A(S)-MAR年频率,锚定结束于三月
(B)A(S)-APR年频率,锚定结束于四月
(B)A(S)-MAY年频率,锚定结束于五月
(B)A(S)-JUN年频率,锚定结束于六月
(B)A(S)-JUL年频率,锚定结束于七月
(B)A(S)-AUG年频率,锚定结束于八月
(B)A(S)-SEP年频率,锚定结束于九月
(B)A(S)-OCT年频率,锚定结束于十月
(B)A(S)-NOV年频率,锚定结束于十一月

这些别名可以用作 date_rangebdate_range 、DatetimeIndex 及其它时间序列函数的参数。

7. 锚定偏移量的含义 

对于偏移量锚定于开始或结束指定频率(MonthEndMonthBeginWeekEnd 等)下列规则应用于前滚与后滚。

n 不为 0 时,如果给定日期不是锚定日期,将寻找下一个或上一个锚点,并向前或向后移动 |n|-1 步。

如果给定日期是锚定日期,则向前(或向后)移动 |n| 个点。

n=0 时,如果日期在锚点,则不移动,否则将前滚至下一个锚点。 8. 假日与节日日历

用假日与日历可以轻松定义 CustomBusinessDay 假日规则,或其它分析所需的预设假日。AbstractHolidayCalendar 类支持所有返回假日列表的方法,并且仅需在指定假日日历类里定义 rules 。start_date 与 end_date 类属性决定了假日的范围。该操作会覆盖 AbstractHolidayCalendar 类,适用于所有日历子类。USFederalHolidayCalendar 是仅有的假日日历,主要用作开发其它日历的示例。

固定日期的假日,如美国阵亡将士纪念日或美国国庆日(7 月 4 日),取决于该假日是否是在周末,可以使用以下规则:

规则说明
nearest_workday把星期六移至星期五,星期日移至星期一
sunday_to_monday星期六紧接着星期一
next_monday_or_tuesday把星期六移至星期一,并把星期日/星期一移至星期二
previous_friday把星期六与星期日移至上一个星期五
next_monday把星期六与星期日移至下一个星期一

推荐阅读