Int*_*eat 6 python numpy pandas
有没有更好/更直接的方法来计算这个比以下?
# 1. Set up the start and end date for which you want to calculate the
# number of business days excluding holidays.
start_date = '01JAN1986'
end_date = '31DEC1987'
start_date = datetime.datetime.strptime(start_date, '%d%b%Y')
end_date = datetime.datetime.strptime(end_date, '%d%b%Y')
# 2. Generate a list of holidays over this period
from pandas.tseries.holiday import USFederalHolidayCalendar
calendar = USFederalHolidayCalendar()
holidays = calendar.holidays(start_date, end_date)
holidays
Run Code Online (Sandbox Code Playgroud)
这给出了一个pandas.tseries.index.DatetimeIndex
DatetimeIndex(['1986-01-01', '1986-01-20', '1986-02-17', '1986-05-26',
'1986-07-04', '1986-09-01', '1986-10-13', '1986-11-11',
'1986-11-27', '1986-12-25', '1987-01-01', '1987-01-19',
'1987-02-16', '1987-05-25', '1987-07-03', '1987-09-07',
'1987-10-12', '1987-11-11', '1987-11-26', '1987-12-25'],
dtype='datetime64[ns]', freq=None, tz=None)
Run Code Online (Sandbox Code Playgroud)
但是你需要一个numpy busday_count列表
holiday_date_list = holidays.date.tolist()
Run Code Online (Sandbox Code Playgroud)
然后,无论有没有假期你都会得到:
np.busday_count(start_date.date(), end_date.date())
>>> 521
np.busday_count(start_date.date(), end_date.date(), holidays = holiday_date_list)
>>> 501
Run Code Online (Sandbox Code Playgroud)
还有一些其他问题略有相似,但通常使用pandas Series或Dataframes(使用pandas在开始和结束日期之间获得工作日,计算两个系列之间的工作日)
如果将创建的索引放入数据框中,则可以使用重新采样来填补空白。传递给的偏移量.resample()可以包括工作日甚至(自定义)日历之类的内容:
from pandas.tseries.holiday import USFederalHolidayCalendar
C = pd.offsets.CustomBusinessDay(calendar=USFederalHolidayCalendar())
start_date = '01JAN1986'
end_date = '31DEC1987'
(
pd.DataFrame(index=pd.to_datetime([start_date, end_date]))
.resample(C, closed='right')
.asfreq()
.index
.size
) - 1
Run Code Online (Sandbox Code Playgroud)
索引的大小 - 1 给出了天数。
| 归档时间: |
|
| 查看次数: |
1876 次 |
| 最近记录: |