當前位置: 首頁>>編程示例 >>用法及示例精選 >>正文


Python NumPy busday_offset方法用法及代碼示例

NumPy 的 busday_offset(~) 方法將提供的日期時間在有效天數內移動特定的偏移量。請注意,busday 代表工作日,但我們可以通過參數指定"business" 日。

參數

1.dates | array-likedatetime

輸入日期時間。日期時間本質上是格式化的字符串,如下所示:

"2020-05-25"

2. offsets | array-likeint

要抵消的天數。

3. roll | string | optional

如何在抵消之前處理無效日期。允許的值如下:

說明

raise

拋出一個錯誤。

nat

返回NaT(即not-a-time)

forward

返回此日期之後的第一個有效日期

following

返回此日期之後的第一個有效日期

backward

返回此日期之前的最後一個有效日期

preceding

返回此日期之前的最後一個有效日期

modifiedfollowing

如果該日期之後的第一個有效日期與該日期在同一個月,則返回該日期。否則,返回該日期之前的最後一個有效日期。

modifiedpreceding

如果該日期之前的最後一個有效日期與該日期在同一個月,則返回該日期。否則,返回此日期之後的第一個有效日期。

默認情況下,roll="raise" 。請參閱下麵的示例以進行說明。

3. weekmask | stringarray-likeboolean | 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 | datetimearray-like | optional

被視為無效日期的日期時間數組。

5. busdaycal | busdaycalender | optional

一個 busdaycalender 對象,指定哪些日期被視為有效日期。如果提供此參數,則不應指定參數 weekmaskholidays

6. out | Numpy array | optional

我們可以將結果存儲在 out 中,這樣可以節省內存空間,因為不會創建新的數組。

返回值

如果為 begindatesenddates 提供了日期時間,則返回單個整數。一個 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 的構造函數中使用的假期是有效日期時間的列表。

相關用法


注:本文由純淨天空篩選整理自Isshin Inada大神的英文原創作品 NumPy | busday_offset method。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。