Python Pandas CustomBusinessHour – 检查给定时间戳是否偏移
在类似金融、银行等领域中,通常需要处理只包含工作日(周一至周五)的数据。
Pandas提供了一个CustomBusinessHour类,可以轻松的处理此类数据,但是有时我们需要检查给定时间戳是否符合预期,这就需要使用到CustomBusinessHour的rollforward和rollback方法。
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()方法,可以快速判断指定时间是否为工作时间,并根据需要做出相应的调整。
极客笔记