About this deal
In [275]: from pandas.tseries.holiday import get_calendar , HolidayCalendarFactory , USLaborDay In [276]: cal = get_calendar ( "ExampleCalendar" ) In [277]: cal . rules Out[277]: [Holiday: Memorial Day (month=5, day=31, offset=
In [256]: pd . Timestamp ( "2014-01-02" ) + pd . offsets . MonthBegin ( n = 0 ) Out[256]: Timestamp('2014-02-01 00:00:00') In [257]: pd . Timestamp ( "2014-01-02" ) + pd . offsets . MonthEnd ( n = 0 ) Out[257]: Timestamp('2014-01-31 00:00:00') In [258]: pd . Timestamp ( "2014-01-01" ) + pd . offsets . MonthBegin ( n = 0 ) Out[258]: Timestamp('2014-01-01 00:00:00') In [259]: pd . Timestamp ( "2014-01-31" ) + pd . offsets . MonthEnd ( n = 0 ) Out[259]: Timestamp('2014-01-31 00:00:00') Holidays / holiday calendars # When I try to list the holidays in a date range, I get the following error: In[11]: tradingCal.holidays(datetime(2014, 12, 31), datetime(2016, 12, 31))There are several time/date properties that one can access from Timestamp or a collection of timestamps like a DatetimeIndex. This is because one day’s business hour end is equal to next day’s business hour start. For example, def __add__ ( date ): date = rollforward ( date ) # does nothing if date is valid return date + < n number of periods >
Date times: A specific date and time with timezone support. Similar to datetime.datetime from the standard library.Cell In [ 484 ], line 1 ----> 1 rng_hourly . tz_localize ( 'US/Eastern' ) File ~/work/pandas/pandas/pandas/core/indexes/datetimes.py:291, in DatetimeIndex.tz_localize (self, tz, ambiguous, nonexistent) 284 @doc ( DatetimeArray . tz_localize ) 285 def tz_localize ( 286 self , ( ... ) 289 nonexistent : TimeNonexistent = "raise" , 290 ) -> Self : --> 291 arr = self . _data . tz_localize ( tz , ambiguous , nonexistent ) 292 return type ( self ) . _simple_new ( arr , name = self . name ) File ~/work/pandas/pandas/pandas/core/arrays/_mixins.py:80, in ravel_compat.
YESTERDAY = (datetime.today() - timedelta(max(1,(TODAY.weekday() + 6) % 7 - 3))) - 1 * US_BUSINESS_DAY If you just want to get the pandas Holiday Calendar that can be used in other pandas functions that take that as an argument: holidays = nyse.holidays() Here is what it can do by creating a pandas DatetimeIndex of all of the valid open hours for the NYSE: import pandas_market_calendars as mcal In certain countries, such as the United States, there are laws ( Uniform Monday Holiday Act of 1968), whose rules are included in Pandas, print(USFederalHolidayCalendar.rules) as an example for developing other calendars. In [82]: pd . date_range ( start , periods = 1000 , freq = "M" ) Out[82]: DatetimeIndex(['2011-01-31', '2011-02-28', '2011-03-31', '2011-04-30', '2011-05-31', '2011-06-30', '2011-07-31', '2011-08-31', '2011-09-30', '2011-10-31', ... '2093-07-31', '2093-08-31', '2093-09-30', '2093-10-31', '2093-11-30', '2093-12-31', '2094-01-31', '2094-02-28', '2094-03-31', '2094-04-30'], dtype='datetime64[ns]', length=1000, freq='M') In [83]: pd . bdate_range ( start , periods = 250 , freq = "BQS" ) Out[83]: DatetimeIndex(['2011-01-03', '2011-04-01', '2011-07-01', '2011-10-03', '2012-01-02', '2012-04-02', '2012-07-02', '2012-10-01', '2013-01-01', '2013-04-01', ... '2071-01-01', '2071-04-01', '2071-07-01', '2071-10-01', '2072-01-01', '2072-04-01', '2072-07-01', '2072-10-03', '2073-01-02', '2073-04-03'], dtype='datetime64[ns]', length=250, freq='BQS-JAN')In [379]: idx = pd . period_range ( "2014-07-01 09:00" , periods = 5 , freq = "H" ) In [380]: idx Out[380]: PeriodIndex(['2014-07-01 09:00', '2014-07-01 10:00', '2014-07-01 11:00', '2014-07-01 12:00', '2014-07-01 13:00'], dtype='period[H]') In [381]: idx + pd . offsets . Hour ( 2 ) Out[381]: PeriodIndex(['2014-07-01 11:00', '2014-07-01 12:00', '2014-07-01 13:00', '2014-07-01 14:00', '2014-07-01 15:00'], dtype='period[H]') In [382]: idx = pd . period_range ( "2014-07" , periods = 5 , freq = "M" ) In [383]: idx Out[383]: PeriodIndex(['2014-07', '2014-08', '2014-09', '2014-10', '2014-11'], dtype='period[M]') In [384]: idx + pd . offsets . MonthEnd ( 3 ) Out[384]: PeriodIndex(['2014-10', '2014-11', '2014-12', '2015-01', '2015-02'], dtype='period[M]') whenever the dob is greater than now. You may want to subtract a few years to now in the condition df['dob'] < now since it may be slightly more likely to have a 101 year old worker than a 1 year old worker... If it helps, I had a similar need for exchange trading calendars. There was some excellent code buried in the Zipline project by Quantopian. I extracted out the relevant part and created a new project for creating market exchange trading calendars in pandas. The links are here, with some of the functionality described below.
In [13]: friday = pd . Timestamp ( "2018-01-05" ) In [14]: friday . day_name () Out[14]: 'Friday' # Add 1 day In [15]: saturday = friday + pd . Timedelta ( "1 day" ) In [16]: saturday . day_name () Out[16]: 'Saturday' # Add 1 business day (Friday --> Monday) In [17]: monday = friday + pd . offsets . BDay () In [18]: monday . day_name () Out[18]: 'Monday'pandas.bdate_range # pandas. bdate_range ( start = None, end = None, periods = None, freq = 'B', tz = None, normalize = True, name = None, weekmask = None, holidays = None, inclusive = 'both', ** kwargs ) [source] #