Python / Pandas / Numpy – Cálculo directo del número de días hábiles entre dos fechas, excepto festivos

¿Hay una forma mejor / más directa de calcular esto que la siguiente?

# 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 

Lo que da un 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) 

Pero necesitas una lista para numpy busday_count

 holiday_date_list = holidays.date.tolist() 

Luego, con y sin las vacaciones, obtienes:

 np.busday_count(start_date.date(), end_date.date()) >>> 521 np.busday_count(start_date.date(), end_date.date(), holidays = holiday_date_list) >>> 501 

Hay algunas otras preguntas ligeramente similares, pero en general trabajan con Pandas Series o Dataframes ( Obtenga días hábiles entre el inicio y la fecha final usando pandas , Contando los días hábiles entre dos series )

Tu respuesta está perfectamente bien. Esta biblioteca se ve muy similar:

https://github.com/seatgeek/businesstime

, lo que no requiere marcos de datos pandas. ( He visto esta información aquí: ¿Existe una función en Python / Pandas para obtener el Delta del horario comercial entre dos horarios ) ?