【发布时间】:2018-02-25 17:20:29
【问题描述】:
我有两个 datetime 索引 - 一个是工作日的date_range,另一个是假期列表。
我按开始和结束日期过滤假期列表。但现在我需要加入他们并删除所有重复项(节假日和交易日都存在)。
最后,我需要将日期范围转换为格式化字符串列表,即:yyyy_mm_dd,我可以稍后对其进行迭代。
到目前为止,这是我的代码:
import datetime
import pandas as pd
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(datetime.datetime(year-1, 12, 31),
datetime.datetime(year, 12, 31))
start_date = "2017_07_01"
end_date = "2017_08_31"
start_date = datetime.datetime.strptime(start_date,"%Y_%m_%d").date()
end_date = datetime.datetime.strptime(end_date,"%Y_%m_%d").date()
date_range = pd.bdate_range(start = start_date, end = end_date, name =
"trading_days")
holidays = get_trading_close_holidays(start_date.year)
holidays = holidays.where((holidays.date > start_date) &
(holidays.date < end_date))
holidays = holidays.dropna(how = 'any')
date_range = date_range.where(~(date_range.trading_days.isin(holidays)))
【问题讨论】:
-
虽然标题提出问题,但帖子并不能确定问题,更不用说提出具体问题了。你只描述需求。有什么错误吗?不想要的结果?请显示所需的输出。
-
道歉 - 我在这里的最后一行代码不起作用。我的问题有两个 1) 一种最佳实践方式来组合两个日期时间索引,以便删除任何重复项 & 2) 然后如何获取这些日期时间对象并将它们格式化为字符串