- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我对 MLK Day Holiday 做出了自己的定义,该定义不遵循首次观察假期的时间,而是坚持 NYSE 首次观察假期的时间。纽约证券交易所于 1998 年 1 月首次庆祝 MLK 日。
当向 Holiday 询问日期之间假期发生的那几天时,它在大多数情况下工作正常,当 MLK 日期不在请求的范围内时返回一个空集,并返回适当的日期。对于假期的 start_date
之前的日期范围,它会适本地返回空集,直到我们到达 1995 年左右,然后失败。我不明白为什么它会失败,而不是在其他情况下,当空集是正确答案时。
注意:仍然卡在 Pandas 0.22.0 上。 Python3
import pandas as pd
from datetime import datetime
from dateutil.relativedelta import MO
from pandas.tseries.holiday import Holiday
__author__ = 'eb'
mlk_rule = Holiday('MLK Day (NYSE Observed)',
start_date=datetime(1998, 1, 1), month=1, day=1,
offset=pd.DateOffset(weekday=MO(3)))
start = pd.to_datetime('1999-01-17')
end = pd.to_datetime('1999-05-01')
finish = pd.to_datetime('1980-01-01')
while start > finish:
print(f"{start} - {end}:")
try:
dates = mlk_rule.dates(start, end, return_name=True)
except Exception as e:
print("\t****** Fail *******")
print(f"\t{e}")
break
print(f"\t{dates}")
start = start - pd.DateOffset(years=1)
end = end - pd.DateOffset(years=1)
运行时,结果为:
1999-01-17 00:00:00 - 1999-05-01 00:00:00:
1999-01-18 MLK Day (NYSE Observed)
Freq: 52W-MON, dtype: object
1998-01-17 00:00:00 - 1998-05-01 00:00:00:
1998-01-19 MLK Day (NYSE Observed)
Freq: 52W-MON, dtype: object
1997-01-17 00:00:00 - 1997-05-01 00:00:00:
Series([], dtype: object)
1996-01-17 00:00:00 - 1996-05-01 00:00:00:
Series([], dtype: object)
1995-01-17 00:00:00 - 1995-05-01 00:00:00:
****** Fail *******
Must provide freq argument if no data is supplied
1995 年发生了什么导致它失败,而不是在前几年的同一时期发生?
最佳答案
答案:在 Holiday
类中,dates()
方法用于收集请求日期范围内的有效假期列表。在为了确保这种情况正确发生,实现收集从请求日期前一年到后一年的所有假期通过内部 _reference_dates()
方法的范围。在这个方法中,如果接收 Holiday
实例有内部开始或结束日期,它使用该日期作为要检查的范围的开始或结束而不是传入的请求范围,即使请求的日期范围早于或超过规则的开始或结束日期。
现有的实现错误地假设可以将有效范围限制在其必须准确识别存在哪些假期的有效范围内。作为日历中一组规则的一部分,对于 Holiday
来说,确定假期不存在的地方和有假期的地方一样重要。 NULL 设置响应是 Holiday
类的一个重要功能。
例如,在需要识别金融市场何时开市或休市的交易日日历中,日历可能需要准确识别在 100 年的历史中市场休市的日子。在这段历史的一小部分时间里,市场仅在 MLK 日休市。当询问 MLK start_date
[1] 之前的开放日或假期时,包含上述构造的 MLK 假期的日历会引发错误。
为了解决这个问题,我重新实现了 _reference_dates()
方法自定义 Holiday 子类以确保在请求日期时范围在 start_date
之前或 end_date
之后延伸假期规则,它使用实际请求的范围来构建引用日期来自内部的请求,而不是受内部请求的约束开始和结束日期。
这是我正在使用的实现。
class MLKHoliday(Holiday):
def __init__(self):
super().__init__('MLK Day (NYSE Observed)',
start_date=datetime(1998, 1, 1), month=1, day=1,
offset=pd.DateOffset(weekday=MO(3)))
def _reference_dates(self, start_date, end_date):
"""
Get reference dates for the holiday.
Return reference dates for the holiday also returning the year
prior to the start_date and year following the end_date. This ensures
that any offsets to be applied will yield the holidays within
the passed in dates.
"""
if self.start_date and start_date and start_date >= self.start_date:
start_date = self.start_date.tz_localize(start_date.tz)
if self.end_date and end_date and end_date <= self.end_date:
end_date = self.end_date.tz_localize(end_date.tz)
year_offset = pd.DateOffset(years=1)
reference_start_date = pd.Timestamp(
datetime(start_date.year - 1, self.month, self.day))
reference_end_date = pd.Timestamp(
datetime(end_date.year + 1, self.month, self.day))
# Don't process unnecessary holidays
dates = pd.DatetimeIndex(start=reference_start_date,
end=reference_end_date,
freq=year_offset, tz=start_date.tz)
return dates
有谁知道这个问题是否已在更新版本的 pandas 中修复?
[1] 注意:正如在原始问题中构建的那样,mlk_rule
实际上不会无法为 dates()
调用提供 NULL 集,只是在一个范围内在 start_date
之前,但实际上会在此之前一年左右开始抛出异常。这是因为通过 _reference_dates()
将日期范围在每个方向上延长一年来减轻关于不需要正确的 NULL 集响应的错误假设。
关于Python3 Panda's Holiday 无法找到过去任意时期的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56193488/
到目前为止,这是我的代码: year = 2012 start = datetime.date(year, 1, 1) end = start + pd.offsets.MonthEnd(72) cl
我正在尝试在Python Anaconda上导入fbprophet,但是,出现此错误: ImportError: cannot import name 'easter' from 'holidays
我正在使用 C# 和 jquery datepicker 开发 asp.net 我的问题是,如何禁用联邦假日日期? 我有一个来自 SQL Server 的动态日期。 有人做过类似的事情或者知道我如何实
我对 MLK Day Holiday 做出了自己的定义,该定义不遵循首次观察假期的时间,而是坚持 NYSE 首次观察假期的时间。纽约证券交易所于 1998 年 1 月首次庆祝 MLK 日。 当向 Ho
正如我在上一个问题中提到的,我正在使用优秀的 OptaPlanner库来创建一个应用程序,帮助自定义作业车间进行项目调度。该应用程序有以下要求: “除非经理明确批准,否则应用程序不得在任何给定的周末或
我有包含假期的时间序列数据。我希望我的模型能够预测即将到来的假期。然而,我的模型似乎预测了总体趋势,并没有在有假期的地方分配增加。 有没有办法让我将 future 的日期指定为假期?我认为将其添加到假
我想创建一个圣诞节及其后一天的假期类,但遇到了问题。有三分之一的特殊情况我无法完全解决。 案例1:圣诞节是星期五,那么假期是星期五(12-25)和星期六(12-26)(已解决)。这个案例发生在2020
我有一个 MySQL-DB,它是这样创建的: create table vacation ( worker_id smallint not null, vacation_start dat
我需要更改 rich:calendar 组件中的假期。默认情况下,组件将假期显示为“星期日”和“星期六”。 下面是为突出假期定义的样式类。 .rich-calendar-holly { backgro
我想将我自己的假期编程到 dojox 日历小部件中。目前它仅以不同的颜色显示周末等。我也想在特殊的本地节日这样做,但我看不出有什么办法可以做到。 我可以将假期安排为全天事件,但我希望有更优雅的事件。有
我有 2 个时刻:moment_start_date 和 moment_end_date。我可以使用以下方法计算出这两个时刻之间的所有假期: var holidays = moment_start_d
这项工作: WITH month AS ( SELECT date_part('doy',d.dt) as doy, dt::date as date FROM generate_series('20
我试图让假期名称通过 workalendar.europe 库中的日期,但我没有结果 form workalendar.europe import France cal._holidays.get(d
我希望日期列将那些公共(public)假期的日期格式化为红色。例如 Date ------ 14/05/2015 14/05/2015 15/05/2015 16/05/2015 .... *
我正在尝试使用 chron的 is.holiday()功能,但我无法让它工作。文档说要修改 .Holiday反对您希望使用的假期,但我对 .Holiday 所做的更改似乎没有被 is.holiday(
我有一个带有 DataTimeIndex 和其他一些列的 Pandas 数据框,类似于: import pandas as pd import numpy as np range = pd.date_
我正在开发一个简单的日历应用程序,我希望在日历上显示上述事件 [bank holidays and that]。 日历只是一个标准的月 View ,带有查看该月每一天的每一天的链接,以及查看下一个/上
我是一名优秀的程序员,十分优秀!