Pandas version checks
-
[X] I have checked that this issue has not already been reported.
-
[X] I have confirmed this bug exists on the latest version of pandas.
-
[X] I have confirmed this bug exists on the main branch of pandas.
Reproducible Example
>>> import datetime
>>> from pandas.tseries.holiday import USFederalHolidayCalendar
>>> cal = USFederalHolidayCalendar()
>>> cal.holidays(start=datetime.date(2018,8,1), end=datetime.date(2018,8,31))
Index([], dtype='object')
Issue Description
The returned result should be type DatetimeIndex
.
Non-empty results are indeed of type DatetimeIndex
. Furthermore, certain other empty results from other ranges (seen below in expected behavior) also have type DatetimeIndex
.
The return type is inconsistent.
Expected Behavior
>>> cal.holidays(start=datetime.date(2020,8,1), end=datetime.date(2020,8,31))
DatetimeIndex([], dtype='datetime64[ns]', freq=None)
>>> cal.holidays(start=datetime.date(2019,8,1), end=datetime.date(2019,8,31))
DatetimeIndex([], dtype='datetime64[ns]', freq=None)
Installed Versions
Comment From: roadswitcher
Same behavior seen for March (the other month with no US Federal holidays), but interestingly the behavior is consistent for 2019.
```>>> import datetime
from pandas.tseries.holiday import USFederalHolidayCalendar cal = USFederalHolidayCalendar() cal.holidays(start=datetime.date(2018,8,1), end=datetime.date(2018,8,31)) Index([], dtype='object') cal.holidays(start=datetime.date(2018,3,1), end=datetime.date(2018,3,31)) Index([], dtype='object') cal.holidays(start=datetime.date(2019,8,1), end=datetime.date(2019,8,31)) DatetimeIndex([], dtype='datetime64[ns]', freq=None) cal.holidays(start=datetime.date(2019,3,1), end=datetime.date(2019,3,31)) DatetimeIndex([], dtype='datetime64[ns]', freq=None)
**Comment From: roadswitcher**
Yeah, I missed some strange behavior that made my PR irrelevant.
Documenting for the record here:
- submitters original issue can be replicated by picking any initial pair of dates that do not contain a holiday between them, and get an `Index` object.
- You can then call against the same calendar object with a date range that contains at least one holiday, and get the `DatetimeIndex` submitter expected
- Repeat the original request with a range of dates that do not contain a holiday, and you now get a `DatetimeIndex`.
Example:
In [3]: cal=USFederalHolidayCalendar()
In [4]: cal.holidays(start="2018-08-01", end="2018-08-31") Out[4]: Index([], dtype='object')
In [5]: cal.holidays(start="2018-07-05", end="2018-08-31") Out[5]: Index([], dtype='object')
In [6]: cal.holidays(start=datetime.date(2018,8,1), end=datetime.date(2018,8,31)) Out[6]: Index([], dtype='object')
In [7]: cal.holidays(start=datetime.date(2018,7,1), end=datetime.date(2018,8,31)) Out[7]: DatetimeIndex(['2018-07-04'], dtype='datetime64[ns]', freq=None)
In [8]: cal.holidays(start=datetime.date(2018,8,1), end=datetime.date(2018,8,31)) Out[8]: DatetimeIndex([], dtype='datetime64[ns]', freq=None) ```
Comment From: roadswitcher
take