Python Pandas – 显示应用于给定 CustomBusinessHour 对象的关键字参数

Python Pandas – 显示应用于给定 CustomBusinessHour 对象的关键字参数

在处理数据时,时间序列是很常见的一种数据类型。而 Pandas 的 CustomBusinessHour 对象,则用于将周末和一些特殊假期等时间排除在开发计算之外。而在 CustomBusinessHour 对象中,涉及到一些可以控制计算方式的参数,这些参数在一些情况下是非常有用的。本文将会介绍如何显示应用于给定 CustomBusinessHour 对象的关键字参数。

CustomBusinessHour 对象

CustomBusinessHour 对象是一种 Pandas 时间偏置,用于计算一周内按自定义业务时间每日的时间差。这个对象并不是 Pandas 标准库的一部分,在使用时需要引入 Pandas 的 CustomBusinessHour 模块。

下面是一个简单的示例,创建了一个 CustomBusinessHour 对象并使用 rollforward()rollback() 方法计算定制化工作时间的偏置值:

import pandas as pd
from pandas.tseries.offsets import CustomBusinessHour

class BusinessTime:
    def __init__(self):
        pass

    # 标识使用自定义的小时偏置(CustomBusinessHour)
    def __call__(self, start_date=None):
        return CustomBusinessHour(
            start= start_date if start_date else pd.Timestamp('09:00:00'),
            end= pd.Timestamp('17:00:00'),
            weekmask='Mon Tue Wed Thu Fri',
            holidays=['2021-10-01', '2021-10-02', '2021-10-03', '2021-10-04', '2021-10-05'],
            normalize=True
        )

business = BusinessTime()
cbh = business()

# 偏置后的日期时间
date = pd.Timestamp('2021-10-05 11:00:00')
print('偏置前:', date)
date = cbh.rollforward(date)
print('偏置后:', date)
# 偏移回去
date = cbh.rollback(date)
print('回移后:', date)

以上代码中,BusinessTime 类通过在 __call__() 方法中通过传参返回 CustomBusinessHour 对象的实例,从而达到定制化自己的业务时间策略。

关键字参数

在 CustomBusinessHour 对象中,存在一些关键字参数,用于控制 CustomBusinessHour 对象的计算方式。下面我们简单介绍一下这些关键字参数:

weekmask

weekmask 参数用于控制一周内工作日的设置,它是一个长度为 7 的二进制字符串,表示一个星期 7 天中那些天是工作日(1表示是工作日,0表示不是)。例如:’1111100′ 表示周一到周五是工作日,周六和周日不是工作日;’1110000′ 表示周一到周三是工作日,周四到周日不是工作日。

cbh = CustomBusinessHour(
            start= pd.Timestamp('09:00:00'),
            end= pd.Timestamp('17:00:00'),
            weekmask='1111100', # 周一到周五是工作日
            normalize=True
        )

以上代码中,通过参数 weekmask 将周末设置为节假日,只计算平时的时间。

holidays

holidays 参数用于指定需要排除的特殊假期日列表,假期日可以是一个字符串、日期、日期时间或 Pandas Timestamp 对象。

cbh = CustomBusinessHour(
            start= pd.Timestamp('09:00:00'),
            end= pd.Timestamp('17:00:00'),
            weekmask='1111100', # 周一到周五是工作日
            holidays=['2021-10-01', '2021-10-02', '2021-10-03'], # 国庆假期
            normalize=True
        )

以上代码中,通过参数 holidays 将国庆 3 天设置为节假日,不计算这 3 天的时间。

start

start 参数用于指定 CustomBusinessHour 对象的起始时间,即在什么时间开始计算 CustomBusinessHour 对象实例的偏置时间。它可以是一个字符串或 Pandas Timestamp 对象。

cbh = CustomBusinessHour(
            start= pd.Timestamp('10:00:00'), # 每天 10 点开始计算偏置时间
            end= pd.Timestamp('17:00:00'),
            weekmask='1111100', # 周一到周五是工作日
            normalize=True
        )

以上代码中,通过参数 start 将 CustomBusinessHour 对象的起始时间设置为每天 10 点,并从这个时间开始计算偏置时间。

end

end 参数用于指定每天的结束时间,与 start 参数组合起来,可以精确指定 CustomBusinessHour 对象计算业务时间的区间

cbh = CustomBusinessHour(
            start= pd.Timestamp('10:00:00'), # 每天 10 点开始计算偏置时间
            end= pd.Timestamp('18:00:00'), # 每天 18 点结束计算偏置时间
            weekmask='1111100', # 周一到周五是工作日
            normalize=True
        )

以上代码中,通过参数 end 将 CustomBusinessHour 对象的结束时间设置为每天 18 点,从而计算业务时间的区间精确到小时。

normalize

normalize 参数用于控制计算 CustomBusinessHour 实例的时候是否使用 datetime.normalize() 方法将日期归一化为 00:00,参数的默认值为 True,即进行归一化处理。

cbh = CustomBusinessHour(
            start= pd.Timestamp('09:00:00'),
            end= pd.Timestamp('17:00:00'),
            weekmask='1111100', # 周一到周五是工作日
            holidays=['2021-10-01', '2021-10-02', '2021-10-03'],
            normalize=False # 不归一化
        )

date = pd.Timestamp('2021-10-05 11:00:00')
print('偏置前:', date)
date = cbh.rollforward(date)
print('偏置后:', date)

在以上代码中,由于设置了 normalize=False ,因此日期不会被归一化处理,导致计算出的偏置时间可能不准确。

结论

CustomBusinessHour 对象是一个非常重要的工具,通过上面对关键字参数的介绍,我们可以更好的控制 CustomBusinessHour 对象的计算方式。关于 CustomBusinessHour 对象更详细的使用方法可以参考 Pandas 官方文档,希望本文能够对大家的学习有所帮助!

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程