pandas.tseries.offsets.CustomBusinessHour#

class pandas.tseries.offsets.CustomBusinessHour#

DateOffset 子类,表示可能 n 个自定义工作日。

在 CustomBusinessHour 中,我们可以使用自定义的 weekmask、holidays 和 calendar。

Parameters:
nint, 默认值 1

表示的小时数。

normalizebool,默认 False

在生成日期范围之前将开始/结束日期规范化到午夜。

weekmaskstr,默认值为 ‘Mon Tue Wed Thu Fri’

有效的业务日周掩码,传递给 numpy.busdaycalendar

holidayslist

要从有效业务日集中排除的日期列表/数组,传递给 numpy.busdaycalendar

日历np.busdaycalendar

要集成的日历。

startstr, time, 或 str/time 列表,默认为 “09:00”

自定义工作小时的开始时间(24 小时格式)。

endstr, time, 或 str/time 列表,默认为 “17:00”

自定义工作小时的结束时间(24 小时格式)。

offsettimedelta, default timedelta(0)

要应用的日期偏移量。

Examples

在下面的示例中,默认参数给出下一个营业时间。

>>> ts = pd.Timestamp(2022, 8, 5, 16)
>>> ts + pd.offsets.CustomBusinessHour()
Timestamp('2022-08-08 09:00:00')

我们也可以改变营业时间的开始和结束时间。

>>> ts = pd.Timestamp(2022, 8, 5, 16)
>>> ts + pd.offsets.CustomBusinessHour(start="11:00")
Timestamp('2022-08-08 11:00:00')
>>> from datetime import time as dt_time
>>> ts = pd.Timestamp(2022, 8, 5, 16)
>>> ts + pd.offsets.CustomBusinessHour(end=dt_time(19, 0))
Timestamp('2022-08-05 17:00:00')
>>> ts = pd.Timestamp(2022, 8, 5, 22)
>>> ts + pd.offsets.CustomBusinessHour(end=dt_time(19, 0))
Timestamp('2022-08-08 10:00:00')

您可以将一天的工作时间划分为几个部分。

>>> import datetime as dt
>>> freq = pd.offsets.CustomBusinessHour(start=["06:00", "10:00", "15:00"],
...                                      end=["08:00", "12:00", "17:00"])
>>> pd.date_range(dt.datetime(2022, 12, 9), dt.datetime(2022, 12, 13), freq=freq)
DatetimeIndex(['2022-12-09 06:00:00', '2022-12-09 07:00:00',
               '2022-12-09 10:00:00', '2022-12-09 11:00:00',
               '2022-12-09 15:00:00', '2022-12-09 16:00:00',
               '2022-12-12 06:00:00', '2022-12-12 07:00:00',
               '2022-12-12 10:00:00', '2022-12-12 11:00:00',
               '2022-12-12 15:00:00', '2022-12-12 16:00:00'],
               dtype='datetime64[ns]', freq='cbh')

可以通过 weekmask 参数指定工作日。为了将返回的 datetime 对象转换为其字符串表示形式,下一个示例使用了 strftime() 函数。

>>> import datetime as dt
>>> freq = pd.offsets.CustomBusinessHour(weekmask="Mon Wed Fri",
...                                      start="10:00", end="13:00")
>>> pd.date_range(dt.datetime(2022, 12, 10), dt.datetime(2022, 12, 18),
...               freq=freq).strftime('%a %d %b %Y %H:%M')
Index(['Mon 12 Dec 2022 10:00', 'Mon 12 Dec 2022 11:00',
       'Mon 12 Dec 2022 12:00', 'Wed 14 Dec 2022 10:00',
       'Wed 14 Dec 2022 11:00', 'Wed 14 Dec 2022 12:00',
       'Fri 16 Dec 2022 10:00', 'Fri 16 Dec 2022 11:00',
       'Fri 16 Dec 2022 12:00'],
       dtype='object')

使用 NumPy 的 business day calendar,您可以定义自定义假期。

>>> import datetime as dt
>>> bdc = np.busdaycalendar(holidays=['2022-12-12', '2022-12-14'])
>>> freq = pd.offsets.CustomBusinessHour(calendar=bdc, start="10:00", end="13:00")
>>> pd.date_range(dt.datetime(2022, 12, 10), dt.datetime(2022, 12, 18), freq=freq)
DatetimeIndex(['2022-12-13 10:00:00', '2022-12-13 11:00:00',
               '2022-12-13 12:00:00', '2022-12-15 10:00:00',
               '2022-12-15 11:00:00', '2022-12-15 12:00:00',
               '2022-12-16 10:00:00', '2022-12-16 11:00:00',
               '2022-12-16 12:00:00'],
               dtype='datetime64[ns]', freq='cbh')

Attributes

base 

返回调用偏移量对象的副本,其中 n=1 且所有其他属性都相同。

calendar 

end 

freqstr 

返回表示频率的字符串。

holidays 

kwds 

返回偏移量的额外参数字典。

n 

name 

返回表示基本频率的字符串。

nanos 

next_bday 

用于移动到下一个工作日的。

normalize 

offset 

Alias for self._offset.

rule_code 

start 

weekmask 

Methods

copy ()

返回频率的副本。

is_anchored ()

(已弃用) 返回频率是否为单位频率 (n=1) 的布尔值.

is_month_end (ts)

如果时间戳发生在月份结束时,则返回布尔值。

is_month_start (ts)

如果时间戳发生在月份开始时,则返回布尔值。

is_on_offset (dt)

如果时间戳与此频率相交,则返回布尔值。

is_quarter_end (ts)

如果时间戳发生在季度结束时,则返回布尔值。

is_quarter_start (ts)

如果时间戳发生在季度开始时,则返回布尔值。

is_year_end (ts)

如果时间戳发生在年份结束时,则返回布尔值。

is_year_start (ts)

如果时间戳发生在年份开始时,则返回布尔值。

rollback (other)

如果提供的日期不在偏移量上,则将其向后滚动到下一个偏移量。

rollforward (other)

如果提供的日期不在偏移量上,则将其向前滚动到下一个偏移量。