Python Pandas – 显示自定义营业时间开始时间

Python Pandas – 显示自定义营业时间开始时间

前言

在进行时间序列分析时,经常需要处理某些业务或行业特定的时间要求。在默认的datetime或timestamp类型中,仅仅是记录日期和时间,却不包含其他业务要求的信息。

不过,作为数据分析师或工程师,我们有着万能神器——Pandas。Pandas为我们提供了一些方便的工具,比如Timedelta类、CustomBusinessHour类等等。本文将介绍如何使用CustomBusinessHour类中的自定义时间来获取开始时间。

CustomBusinessHour类

在本文中,我们主要关注CustomBusinessHour类,该类继承自Python datetime库中的datetime.timedelta。Pandas通过定义一个CustomBusinessHour来描述一个业务的营业时间,时间序列数据可以使用它来生成一个偏移量。

假设在我们的业务场景中,我们需要以每周六的早上8:00为开始时间。我们可以定义一个CustomBusinessHour对象:

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

bhour = CustomBusinessHour(start='08:00:00', end='23:59:59', weekmask='Sat')

这段代码中,我们定义了一个每周六的营业时间自定义对象bhour。可以看到,我们指定了开始时间为8:00,结束时间为23:59:59。weekmask中可以指定从星期一到星期日的哪些日期属于工作日,我们这里指定只有星期六是营业的。

获取自定义时间序列

现在我们有了一个CustomBusinessHour对象bhour,我们如何将它应用到我们的时间序列中呢?我们可以使用Pandas中的date_range函数来创建一个自定义的时间序列,并将它与我们的CustomBusinessHour对象相关联:

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

bhour = CustomBusinessHour(start='08:00:00', end='23:59:59', weekmask='Sat')

index = pd.date_range(start='2022-01-01', end='2022-01-08', freq=bhour)

print(index)

这段代码中,我们创建了一个从2022年1月1日起,到2022年1月8日的时间序列,并设置了频率为我们定义的每周六的营业时间。我们可以看到输出如下:

DatetimeIndex(['2022-01-01 08:00:00', '2022-01-01 09:00:00',
               '2022-01-01 10:00:00', '2022-01-01 11:00:00',
               '2022-01-01 12:00:00', '2022-01-01 13:00:00',
               '2022-01-01 14:00:00', '2022-01-01 15:00:00',
               '2022-01-01 16:00:00', '2022-01-01 17:00:00',
               '2022-01-01 18:00:00', '2022-01-01 19:00:00',
               '2022-01-01 20:00:00', '2022-01-01 21:00:00',
               '2022-01-01 22:00:00', '2022-01-01 23:00:00',
               '2022-01-08 08:00:00', '2022-01-08 09:00:00',
               '2022-01-08 10:00:00', '2022-01-08 11:00:00',
               '2022-01-08 12:00:00', '2022-01-08 13:00:00',
               '2022-01-08 14:00:00', '2022-01-08 15:00:00',
               '2022-01-08 16:00:00', '2022-01-08 17:00:00', '2022-01-08 18:00:00', '2022-01-08 19:00:00', '2022-01-08 20:00:00', '2022-01-08 21:00:00', '2022-01-08 22:00:00', '2022-01-08 23:00:00'], dtype='datetime64[ns]', freq='C')

我们可以看到,根据我们定义的CustomBusinessHour对象,生成了正确的时间序列。

获取开始时间

生成了自定义时间序列之后,我们可以使用索引器来获取每个时间点的开始时间。在Pandas中,我们使用floor函数可以将时间点舍入到下一个偏移量:

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

bhour = CustomBusinessHour(start='08:00:00', end='23:59:59', weekmask='Sat')

index = pd.date_range(start='2022-01-01', end='2022-01-08', freq=bhour)

start_time = index.floor('h')

print(start_time)

这段代码中,我们先使用刚刚生成的时间序列index,使用floor函数将时间点舍入到每个小时的开始时间。我们可以看到:

DatetimeIndex(['2022-01-01 08:00:00', '2022-01-01 09:00:00',
               '2022-01-01 10:00:00', '2022-01-01 11:00:00',
               '2022-01-01 12:00:00', '2022-01-01 13:00:00',
               '2022-01-01 14:00:00', '2022-01-01 15:00:00',
               '2022-01-01 16:00:00', '2022-01-01 17:00:00',
               '2022-01-01 18:00:00', '2022-01-01 19:00:00',
               '2022-01-01 20:00:00', '2022-01-01 21:00:00',
               '2022-01-01 22:00:00', '2022-01-01 23:00:00',
               '2022-01-08 08:00:00', '2022-01-08 09:00:00',
               '2022-01-08 10:00:00', '2022-01-08 11:00:00',
               '2022-01-08 12:00:00', '2022-01-08 13:00:00',
               '2022-01-08 14:00:00', '2022-01-08 15:00:00',
               '2022-01-08 16:00:00', '2022-01-08 17:00:00',
               '2022-01-08 18:00:00', '2022-01-08 19:00:00',
               '2022-01-08 20:00:00', '2022-01-08 21:00:00',
               '2022-01-08 22:00:00', '2022-01-08 23:00:00'], dtype='datetime64[ns]', freq='C')

从输出结果中可以看到,每个时间点正确地被舍入为了整点的开始时间。

现在,我们已经成功得到了我们要的自定义营业时间开始时间序列。

结论

本文简单介绍了如何使用Pandas中的CustomBusinessHour类来生成一个自定义的营业时间偏移对象,并生成相应的自定义时间序列,并使用floor函数来获取每个时间点的开始时间。它们可以帮助我们处理某些业务特定的时间序列需求,并方便我们进行进一步的时间序列分析和处理。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程