NumPy 的 busday_offset(~) 方法将提供的日期时间在有效天数内移动特定的偏移量。请注意,busday 代表工作日,但我们可以通过参数指定"business" 日。
参数
1.dates | array-like 共 datetime
输入日期时间。日期时间本质上是格式化的字符串,如下所示:
"2020-05-25"
2. offsets | array-like 共 int
要抵消的天数。
3. roll | string | optional
如何在抵消之前处理无效日期。允许的值如下:
|
值 |
说明 |
|---|---|
|
raise |
抛出一个错误。 |
|
nat |
返回NaT(即not-a-time) |
|
forward |
返回此日期之后的第一个有效日期 |
|
following |
返回此日期之后的第一个有效日期 |
|
backward |
返回此日期之前的最后一个有效日期 |
|
preceding |
返回此日期之前的最后一个有效日期 |
|
modifiedfollowing |
如果该日期之后的第一个有效日期与该日期在同一个月,则返回该日期。否则,返回该日期之前的最后一个有效日期。 |
|
modifiedpreceding |
如果该日期之前的最后一个有效日期与该日期在同一个月,则返回该日期。否则,返回此日期之后的第一个有效日期。 |
默认情况下,roll="raise" 。请参阅下面的示例以进行说明。
3. weekmask | string 或array-like 或boolean | optional
一周中被视为有效的日子。您可以指定长度为 7 的字符串,其中 0 代表无效,1 代表有效工作日,从周一到周日。例如,"1111100" 意味着周末(周六和周日)为无效日期。此外,您还可以使用 three-character 缩写,例如:
Mon Tue Wed Thu Fri Sat Sun
例如,"Mon Wed Fri" 表示只有星期一、星期三和星期五是有效日期,所有其他工作日均无效。
或者,您可以提供大小为 7 的布尔值数组,其中 True 表示相应的工作日有效,否则为 False。例如,[True,True,True,True,True,False,False] 再次意味着周末是无效日期。
默认情况下, weekmask="1111100" ,即有效工作日为周一至周五(含周一至周五)。
4. holidays | datetime 的array-like | optional
被视为无效日期的日期时间数组。
5. busdaycal | busdaycalender | optional
一个 busdaycalender 对象,指定哪些日期被视为有效日期。如果提供此参数,则不应指定参数 weekmask 和 holidays 。
6. out | Numpy array | optional
我们可以将结果存储在 out 中,这样可以节省内存空间,因为不会创建新的数组。
返回值
如果为 begindates 和 enddates 提供了日期时间,则返回单个整数。一个 Numpy 整数数组,表示指定范围内的日期计数。
例子
轧辊参数
增加
这里我们收到一个错误,因为日期 2020-11-22 是星期日:
dates = ["2020-11-22", "2020-11-25", "2020-11-27"]
np.busday_offset(dates, 2)
ValueError: Non-business day date in busday_offset
纳特
dates = ["2020-11-22", "2020-11-25", "2020-11-27"]
np.busday_offset(dates, 2, roll="nat")
array([ 'NaT', '2020-11-27', '2020-12-01'], dtype='datetime64[D]')
向前
dates = ["2020-11-22", "2020-11-25", "2020-11-27"]
np.busday_offset(dates, 2, roll="forward")
array(['2020-11-25', '2020-11-27', '2020-12-01'], dtype='datetime64[D]')
正如我们所说,第一个日期 2020-11-22 无效,因为它是星期日。 roll="forward" 参数表示返回该日期之后的第一个有效日期,在本例中为2020-11-23(星期一)。接下来,应用偏移量 2 得到 2020-11-25 。
落后
dates = ["2020-11-22", "2020-11-25", "2020-11-27"]
np.busday_offset(dates, 2, roll="backward")
array(['2020-11-24', '2020-11-27', '2020-12-01'], dtype='datetime64[D]')
同样,第一个日期 2020-11-22 无效,因为它是星期日。 roll="backward" 参数表示返回该日期之前的最后一个有效日期,在本例中为2020-11-20(星期五)。接下来,应用 2 个有效天的偏移量,这需要完全跳过无效周末(即 21 日和 22 日),然后应用 2 天的偏移量得到 2020-11-24。
修改如下
dates = ["2020-05-30"]
np.busday_offset(dates, 2, roll="modifiedfollowing")
array(['2020-06-02'], dtype='datetime64[D]')
这里,2020-05-30是周六,无效。 roll="modifiedfollowing" 参数查找该日期之后的第一个有效日期,即2020-06-01(星期一)。由于我们已跨越到下个月,modifiedfollowing 要求我们转到 2020-05-30 之前的最后一个有效日期,即 2020-05-29(星期五)。然后我们进行抵消;我们移动 2 个有效天(忽略所有无效天),这最终会给我们2020-06-02!
修改前文
为了简洁起见,这里的部分将被省略,但这本质上只是修改后的相反内容。
注意
为了演示其他参数如何工作,我们将使用 NumPy 的 is_busday(~) 方法。
指定周掩码
np.is_busday(["2020-12-25", "2020-12-26", "2020-12-27"], "1111110")
array([ True, True, False])
在这里,我们将星期日设置为无效日期 - 如果您检查日历,您会看到 "2020-12-27" 是星期日,因此这就是我们为该条目得到 False 的原因。
指定假期
我们还可以只指定有效日期并使所有其他日期无效,而不是指定无效日期:
holidays = ["2020-12-25"]
np.is_busday(["2020-12-25", "2020-12-26", "2020-12-27"], "1111111", holidays)
array([False, True, True])
此处,2020-12-25 返回 False,因为我们将该日期指定为假日,并且假日被视为无效日期。
指定有效日期
我们还可以只指定有效日期并使所有其他日期无效,而不是指定无效日期:
bdc = np.busdaycalendar(weekmask="1111111", holidays=["2020-12-26"])
np.is_busday(["2020-12-25", "2020-12-26", "2020-12-27"], busdaycal=bdc)
array([ True, False, True])
此处,busdaycalendar 对象指定哪些日期被视为有效。这里可能会令人困惑,但 busdaycalendar 的构造函数中使用的假期是有效日期时间的列表。
相关用法
- Python NumPy busday_count方法用法及代码示例
- Python NumPy busdaycalendar对象用法及代码示例
- Python MongoDB bulk_write()用法及代码示例
- Python binascii.crc32用法及代码示例
- Python bytes.isupper用法及代码示例
- Python base64.b64decode()用法及代码示例
- Python bokeh.plotting.figure.asterisk()用法及代码示例
- Python bytes.zfill用法及代码示例
- Python binary转string用法及代码示例
- Python base64.b32decode()用法及代码示例
- Python bytes.expandtabs用法及代码示例
- Python bytearray()用法及代码示例
- Python bokeh.plotting.figure.annular_wedge()用法及代码示例
- Python NumPy base属性用法及代码示例
- Python Pandas bdate_range方法用法及代码示例
- Python bytes.isalpha用法及代码示例
- Python base64.b85encode()用法及代码示例
- Python base64.b64encode()用法及代码示例
- Python bokeh.plotting.figure.circle()用法及代码示例
- Python bytes.hex用法及代码示例
- Python bool()用法及代码示例
- Python bz2.decompress(s)用法及代码示例
- Python bokeh.plotting.figure.circle_cross()用法及代码示例
- Python bokeh.plotting.figure.bezier()用法及代码示例
- Python bokeh.plotting.figure.diamond()用法及代码示例
注:本文由纯净天空筛选整理自Isshin Inada大神的英文原创作品 NumPy | busday_offset method。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。
