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_range
、bdate_range
、DatetimeIndex
及其它时间序列函数的参数。
7. 锚定偏移量的含义
对于偏移量锚定于开始或结束指定频率(MonthEnd
、MonthBegin
、WeekEnd
等)下列规则应用于前滚与后滚。
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 | 把星期六与星期日移至下一个星期一 |