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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。