如何识别从今天到过去和未来(不包括周末)的三个工作日,并将它们放入熊猫数据框中?
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_range
的 start
和 end
参数中包含所需的偏移量,以便日期显示在指定金额的 +/- 容差范围内(此处为 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')
【讨论】:
以上是关于如何识别从今天到过去和未来(不包括周末)的三个工作日,并将它们放入熊猫数据框中?的主要内容,如果未能解决你的问题,请参考以下文章