📌  相关文章
📜  Python|熊猫 tseries.offsets.CustomBusinessDay.offset(1)

📅  最后修改于: 2023-12-03 15:19:21.483000             🧑  作者: Mango

Python | 熊猫 CustomBusinessDay.offset

Pandas 是 Python 中一个广泛使用的数据分析库,它支持多种时间序列数据的操作。Pandas 中的时间序列数据类型为 Datetime,可以对这种数据类型进行各种基本和高级的运算。

CustomBusinessDay.offset 是 Pandas 中一个自定义时间偏移的类,用于处理常规工作日的数据,而不是每日的数据。这个类允许您定义自己的工作日和假日,因此您可以使用自己的日历来计算日期。

使用 CustomBusinessDay.offset

CustomBusinessDay.offset 是需要构建自定义假日日期的。在这个类中定义的自定义日历会被应用于日期偏移量。

自定义假日

定义自定义的假日日历的方法是:使用一个列表或者数据帧对象传递一个特定的日期值,这些日期值将被视为假日。下面是定义自定义假日的示例:

from pandas.tseries.offsets import CustomBusinessDay
from pandas.tseries.holiday import USFederalHolidayCalendar

# 自定义假日
my_holidays = ['2022-11-11', '2022-12-26']

# 利用自定义假日创建偏移量
my_offset = CustomBusinessDay(calendar=USFederalHolidayCalendar(), holidays=my_holidays)

# 获得2022-11-11之后的第10个工作日
print(pd.Series(pd.date_range('2022-11-11', periods=20, freq=my_offset)).iloc[-1])

在这个示例中,我们首先定义了一个自定义假日列表,包括 2022 年的灵便节和圣诞节。然后,我们创建了一个新的 CustomBusinessDay.offset 实例,并与 USFederalHolidayCalendar 关联。这意味着我们考虑了所有的联邦假日,另外还包括我们定义的自定义假日。

最后,我们使用 pd.Series(pd.date_range('2022-11-11', periods=20, freq=my_offset)) 创建了一个 Pandas 序列,该序列包含 2022 年 11 月 11 日之后的前 20 个日期,每个日期的间隔是工作日偏移量。最后,我们使用 .iloc[-1] 访问这个序列的最后一个日期,即 2022 年 11 月 28 日,因为在这个日期后的下一个 10 个工作日是 2022 年 12 09 日。

不考虑周末的偏移量

要在不考虑周末的情况下进行偏移量计算,可以使用偏移量类的属性 weekmask。默认的 weekmask 值为 “Mon Tue Wed Thu Fri”,意味着它将不包括周六和周日。我们可以使用以下代码更改 weekmask

my_offset.weekmask = 'Mon Tue Wed Thu Fri Sat'

这将允许我们在星期六和星期日计算到偏移量,但保留节假日等其它假期不计入。当您想计算从某个日期开始的下一个工作日时,这是很有用的。

不考虑假日的偏移量

要在不考虑假日的情况下进行偏移量计算,可以将休息日列表设置为 None

my_offset.holidays = None

这将允许我们以常规工作日的方式进行偏移量计算并保留周末日期。这在您想以标准的“起始日期 + 偏移量”的方式计算日期时特别有用。

结论

CustomBusinessDay.offset 是 Pandas 中一个非常有用的类,允许您以自己的方式定义工作日和假日,并用于日期偏移量的计算。这对于需要按照自定义日历计算工作日偏移量的任务非常有用,例如金融数据分析。此外,如果您需要在不考虑周末、不考虑假期、或同时考虑周末和假期的情况下进行偏移计算,这个类也能够满足您的需要。