【发布时间】:2019-08-08 00:41:07
【问题描述】:
我有几个国家/地区的财务时间序列,对于每个时间序列,我想删除落在该特定国家公共假期的观察结果。为此,我在时间序列中创建了一个新列,其中包含布尔值来指示日期是否为假日。
所以我找到了这段代码来分配布尔值,它非常适合我的美国时间序列: Pandas: Checking if a date is a holiday and assigning boolean value
但我无法让它为其他国家/地区工作。我尝试使用 workalendar,例如下面的代码,但收到错误消息。对于使用 workalendar 或其他方法的任何建议,我将不胜感激。
from datetime import date
from workalendar.europe import UnitedKingdom
cal = UnitedKingdom()
holidays = cal.holidays(start=uk_daily['Date for PH'].min(),
end=uk_daily['Date for PH'].max()).to_pydatetime()
uk_daily['Holiday'] = uk_daily['Date for PH'].isin(holidays)
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-26-2d820caa4432> in <module>
4
5 holidays = cal.holidays(start=uk_daily['Date for PH'].min(),
----> 6 end=uk_daily['Date for PH'].max()).to_pydatetime()
TypeError: holidays() got an unexpected keyword argument 'start'
数据只是一个带有时间索引和几列的 Pandas 数据框。使用这个可重现的示例,我得到了相同的错误消息:
import pandas as pd
from datetime import date
from workalendar.europe import UnitedKingdom
cal = UnitedKingdom()
dr = pd.date_range(start='1996-01-01', end='2019-06-28')
df = pd.DataFrame()
df['Date'] = dr
holidays = cal.holidays(start=dr.min(), end=dr.max()).to_pydatetime()
df['Holiday'] = df['Date'].isin(holidays)
df.head(10)
【问题讨论】:
-
首先,您的代码基于问题而不是答案,其次,答案不是使用
workalendar,而是使用熊猫数据集。如果您想使用workalendar数据,您需要将其转换为在 Pandas 中使用。 -
感谢您指出这一点。我将如何转换工作日历数据?