如何识别从今天到过去和未来(不包括周末)的三个工作日,并将它们放入熊猫数据框中?

Posted

技术标签:

【中文标题】如何识别从今天到过去和未来(不包括周末)的三个工作日,并将它们放入熊猫数据框中?【英文标题】:How to identify three business days from, and including, today into the past and future (excluding weekends) and put them into a pandas dataframe? 【发布时间】:2017-05-28 22:22:35 【问题描述】:

我如何确定从今天到过去和未来(不包括周末)的三个工作日(包括今天),并将它们放入数据框中?

示例: 今天是星期五,2017 年 1 月 13 日

我想计算 +/- 3 个工作日并将它们放入数据框中

预期输出:

       A
0 01/10/2017
1 01/11/2017
2 01/12/2017
3 01/13/2017
4 01/17/2017
5 01/18/2017
6 01/19/2017

我对此进行了实验,但我无法完全得到我需要的东西:

import pandas as pd
from datetime import date, datetime, timedelta
from pandas.tseries.holiday import USFederalHolidayCalendar
from pandas.tseries.offsets import CustomBusinessDay 

today = date.today()
plustwo = today + timedelta(days=3)
minustwo = today - timedelta(days=3)
caldr = CustomBusinessDay(calendar=USFederalHolidayCalendar())
df = pd.date_range(minustwo,plustwo,freq=caldr)

电流输出:

>>> df
DatetimeIndex(['2017-01-10', '2017-01-11', '2017-01-12', '2017-01-13'], dtype='datetime64[ns]', freq='C')

解决方案:

>>> pd.date_range(start=today - pd.offsets.BusinessDay(3), end=today + pd.offsets.BusinessDay(3), freq='B')

DatetimeIndex(['2017-01-10', '2017-01-11', '2017-01-12', '2017-01-13',
               '2017-01-16', '2017-01-17', '2017-01-18'],
              dtype='datetime64[ns]', freq='B')

【问题讨论】:

您得到的输出对于USFederalHolidayCalendar 确实是正确的。除周六/周日外,所有工作日都是如此。使用caldr.weekmask 进行检查,使用caldr.holidays 获取所有假期日期的列表。顺便说一句,第 16 位在此列表中。因此,您获得的工作日实际上是此日历选择的正确工作日。 不,pd.date_range 首先设置它的操作日期范围。在这里,它从'2017-01-10' 开始并在'2017-01-16' 稳定下来。然后,频率部分实际上发挥作用。因此,它正确地检测到 '2017-01-10''2017-01-13'。然后是你的周六/周日和'2017-01-16' 部分,根据其运作规则,默认情况下是假期。 omg.. 就是这样!谢谢!! @MaxU,是的,它已添加。 @Mike,我已经写了答案。如果这对你有用,你可以接受它。 【参考方案1】:

您可以在 pd.date_rangestartend 参数中包含所需的偏移量,以便日期显示在指定金额的 +/- 容差范围内(此处为 3 个工作日) .

from datetime import date
import pandas as pd
from pandas.tseries.offsets import BusinessDay

delta = BusinessDay(3)        # offset to +/- 3 days
today = date.today()          # datetime.date(2017, 1, 14)
pd.date_range(start=today-delta, end=today+delta, freq='B')

产生:

DatetimeIndex(['2017-01-11', '2017-01-12', '2017-01-13', '2017-01-16',
               '2017-01-17', '2017-01-18'],
              dtype='datetime64[ns]', freq='B')

【讨论】:

以上是关于如何识别从今天到过去和未来(不包括周末)的三个工作日,并将它们放入熊猫数据框中?的主要内容,如果未能解决你的问题,请参考以下文章

数据仓库:从过去到未来(下)

周末闲聊暮然回首,2020已经过去了三个月

人工智能的过去和未来:深度学习——智能时代的核心驱动力量

从1G到5G,从回顾过去到展望未来

周末计划-20171028

前端开发和网页设计的过去和未来