Python Pandas CustomBusinessHour – 检查给定时间戳是否偏移

Python Pandas CustomBusinessHour – 检查给定时间戳是否偏移

在类似金融、银行等领域中,通常需要处理只包含工作日(周一至周五)的数据。

Pandas提供了一个CustomBusinessHour类,可以轻松的处理此类数据,但是有时我们需要检查给定时间戳是否符合预期,这就需要使用到CustomBusinessHourrollforwardrollback方法。

CustomBusinessHour简介

CustomBusinessHour类是pandas.tseries.offset模块中的一个类, 可以标识一个自定义的商业小时,下面来详细介绍一下CustomBusinessHour类。

创建CustomBusinessHour对象

使用pd.tseries.offsets库中的CustomBusinessHour类可以创建一个符合自定义工作日的商业小时。下面是一个例子,创建一个以9点到17点为一天的商业小时。

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

# 创建商业小时对象
biz_hours = CustomBusinessHour(start = '09:00', end = '17:00')

使用CustomBusinessHour对象

我们可以使用CustomBusinessHour类来进行跟工作日,工作小时相关的时间运算。

from pandas.tseries.offsets import CustomBusinessHour
from pandas.tseries.offsets import Day

biz_hours = CustomBusinessHour(start='09:00', end='17:00')

start_date = pd.datetime(2021,1,1,9)
end_date = start_date + Day(2)

# 计算两个工作日之间的小时数
diff = biz_hours.diff(start_date, end_date)
print('两个工作日之间的小时数',diff)

# 根据指定时间跳过非工作时间
opendate = biz_hours.rollforward(start_date)
print('开盘时间为:',opendate)

# 根据指定时间返回最近的一个工作时间
closedate = biz_hours.rollback(end_date)
print('收盘时间为:',closedate)

CustomBusinessHour实例

下面我们具体看一下实现的细节。

计算两个时间之间的工作小时数

from pandas.tseries.offsets import CustomBusinessHour
from pandas.tseries.offsets import Day

biz_hours = CustomBusinessHour(start='09:00', end='17:00')

start_date = pd.datetime(2021,1,1,9)
end_date = start_date + Day(2)

# 计算两个工作日之间的小时数
diff = biz_hours.diff(start_date, end_date)
print('两个工作日之间的小时数',diff)

运行结果:

两个工作日之间的小时数 14.0

上述代码中,假设2021年1月1日9:00为一个工作时间的开始,从这个时间往后2个工作日之间的工作日数量为14个小时。

根据指定时间跳过非工作时间

from pandas.tseries.offsets import CustomBusinessHour

biz_hours = CustomBusinessHour(start='09:00', end='17:00')

start_date = pd.datetime(2021,1,1,8)

# 根据指定时间跳过非工作时间
opendate = biz_hours.rollforward(start_date)
print('开盘时间为:',opendate)

运行结果:

开盘时间为:2021-01-01 09:00:00

上述代码中,假设2021年1月1日8:00为一个不是工作时间的起始时间,rollforward()方法可以返回最近的下一个工作时间。

根据指定时间返回最近的一个工作时间

from pandas.tseries.offsets import CustomBusinessHour

biz_hours = CustomBusinessHour(start='09:00', end='17:00')

end_date = pd.datetime(2021,1,1,18)

# 根据指定时间返回最近的一个工作时间
closedate = biz_hours.rollback(end_date)
print('收盘时间为:',closedate)

运行结果:

收盘时间为:2021-01-01 17:00:00

上述代码中,假设2021年1月1日18:00为一个不是工作时间的起始时间,rollback()方法可以返回最近的上一个工作时间。

结论

在处理金融或银行等领域的数据时,由于仅涉及到工作日,CustomBusinessHour类可以帮助我们轻松地跳过非工作日和非工作时间,方便计算。使用rollforward()rollback()方法,可以快速判断指定时间是否为工作时间,并根据需要做出相应的调整。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程