当前位置: 首页 > 面试题库 >

与熊猫创建交易假期日历

洪鸿博
2023-03-14
问题内容

我正在尝试使用熊猫创建交易日历。我能够基于USFederalHolidayCalendar创建一个cal实例。USFederalHolidayCalendar与交易日历不一致,因为交易日历不包括哥伦布日和退伍军人节。但是,交易日历包括耶稣受难日(不包括在USFederalHolidayCalendar中)。以下代码中除最后一行外的所有内容均有效:

from pandas.tseries.holiday import get_calendar, HolidayCalendarFactory, GoodFriday
from datetime import datetime

cal = get_calendar('USFederalHolidayCalendar')  # Create calendar instance
cal.rules.pop(7)                                # Remove Veteran's Day rule
cal.rules.pop(6)                                # Remove Columbus Day rule
tradingCal = HolidayCalendarFactory('TradingCalendar', cal, GoodFriday)

tradingCal实例似乎可以正常运行,因为我能够查看“假日”规则。

In[10]: tradingCal.rules
Out[10]: 
[Holiday: Labor Day (month=9, day=1, offset=<DateOffset: kwds={'weekday': MO(+1)}>),
 Holiday: Presidents Day (month=2, day=1, offset=<DateOffset: kwds={'weekday': MO(+3)}>),
 Holiday: Good Friday (month=1, day=1, offset=[<Easter>, <-2 * Days>]),
 Holiday: Dr. Martin Luther King Jr. (month=1, day=1, offset=<DateOffset: kwds={'weekday': MO(+3)}>),
 Holiday: New Years Day (month=1, day=1, observance=<function nearest_workday at 0x000000000A190BA8>),
 Holiday: Thanksgiving (month=11, day=1, offset=<DateOffset: kwds={'weekday': TH(+4)}>),
 Holiday: July 4th (month=7, day=4, observance=<function nearest_workday at 0x000000000A190BA8>),
 Holiday: Christmas (month=12, day=25, observance=<function nearest_workday at 0x000000000A190BA8>),
 Holiday: MemorialDay (month=5, day=31, offset=<DateOffset: kwds={'weekday': MO(-1)}>)]

当我尝试列出日期范围内的假期时,出现以下错误:

In[11]: tradingCal.holidays(datetime(2014, 12, 31), datetime(2016, 12, 31))
Traceback (most recent call last):
  File "C:\Python27\lib\site-packages\IPython\core\interactiveshell.py", line 3035, in run_code
    exec(code_obj, self.user_global_ns, self.user_ns)
  File "<ipython-input-12-2708cd2db7a0>", line 1, in <module>
    tradingCal.holidays(datetime(2014, 12, 31), datetime(2016, 12, 31))
TypeError: unbound method holidays() must be called with TradingCalendar instance as first argument (got datetime instance instead)

有任何想法吗?


问题答案:

从头开始创建交易日历可能更直接,例如:

import datetime as dt

from pandas.tseries.holiday import AbstractHolidayCalendar, Holiday, nearest_workday, \
    USMartinLutherKingJr, USPresidentsDay, GoodFriday, USMemorialDay, \
    USLaborDay, USThanksgivingDay


class USTradingCalendar(AbstractHolidayCalendar):
    rules = [
        Holiday('NewYearsDay', month=1, day=1, observance=nearest_workday),
        USMartinLutherKingJr,
        USPresidentsDay,
        GoodFriday,
        USMemorialDay,
        Holiday('USIndependenceDay', month=7, day=4, observance=nearest_workday),
        USLaborDay,
        USThanksgivingDay,
        Holiday('Christmas', month=12, day=25, observance=nearest_workday)
    ]


def get_trading_close_holidays(year):
    inst = USTradingCalendar()

    return inst.holidays(dt.datetime(year-1, 12, 31), dt.datetime(year, 12, 31))


if __name__ == '__main__':
    print(get_trading_close_holidays(2016))
    #    DatetimeIndex(['2016-01-01', '2016-01-18', '2016-02-15', '2016-03-25',
    #                   '2016-05-30', '2016-07-04', '2016-09-05', '2016-11-24',
    #                   '2016-12-26'],
    #                  dtype='datetime64[ns]', freq=None)


 类似资料:
  • 我有一个关于日期范围的问题。我用板条箱装了这样的东西: 结果: 我需要删除3个日期:2017-12-25, 2017-12-27和2018-01-04。我在寻找能帮助我的公式,但我没有找到正确的。我也试图将所有这些更改为列表,但后来我无法使用删除公式,因为它没有找到列表中的值...有人知道怎么修吗? 谢谢大家!

  • 问题内容: 我有一个带有date列的pandas数据框,并且试图添加一个新的布尔值列,以指示给定的日期是否是假日。 以下是代码,但由于类型似乎不同而无法正常工作(所有值均为False),并且我无法弄清楚如何将熊猫数据框中的“日期”设为相同类型作为假期: 问题答案: 您无需进行任何转换。只是直接比较。非常聪明,可以比较许多不同类型的日期和时间。如果您在日期/时间兼容性方面遇到问题,则必须使用稍微深奥

  • 问题内容: 我有一个数据框,它提供两个整数列,分别是年份和年份: 我需要从这两个数字创建一个datetime-object。 我试过了,但是抛出一个错误: 然后我尝试了一下,它可以工作,但是给出了错误的结果,那就是它完全忽略了一周: 我真的迷失在Python ,Numpy和Pandas之间,您能告诉我它是如何正确完成的吗? 我正在使用Python 3,如果这在任何方面都有意义的话。 编辑: 从Py

  • 问题内容: 我有一个固定宽度的数据文件,其中包含日期,但是当我尝试绘制数据时,日期无法在x轴上正确显示。 我的档案看起来像 等等 我用 熊猫 读文件 所以我想这里的问题是从熊猫到matplotlib日期时间的转换,如何进行转换? 我也直接尝试了熊猫: 但这失败了 TypeError:空的“ Series”:没有要绘制的数字数据 问题答案: 如果您使用包含列名而不是字符串的列表,则data.set_

  • 我有一个df,看起来像: 作为pd进口熊猫 df df

  • 我有多个CSV文件与测量数据,我将需要合并到一个熊猫DataFrame与日期/时间作为索引。我尝试过使用pd.concat,但是,这只是把csv文件添加在一起,并不能正确地“排序”它们。 示例文件1: 示例文件2: 如何将文件导入到一个数据帧中,使其按索引和名称进行排序??