Determine if a day is a business day in Python / Pandas

There is builtin method to do this in pandas.

For Pandas version <1.0

from pandas.tseries.offsets import Day, BDay
from datetime import datetime


bday=BDay()
is_business_day = bday.onOffset(datetime(2020,8,20))

For Pandas version >=1.1.0 (onOffset is deprecated)

from pandas.tseries.offsets import Day, BDay
from datetime import datetime


bday=BDay()
is_business_day = bday.is_on_offset(datetime(2020,8,20))

I just found a different solution to this. This might be interesting if you want to find the next business day if your date is not a business day.

   bdays=BDay()
   def is_business_day(date):
       return date == date + 0*bdays

adding 0*bdays rolls forward on the next business day including the current one. Unfortunately, subtracting 0*bdays does not roll backwards (at least with the pandas version I was using).

Moreover, due to this behavior, you also need to be careful since not necessarily 0*bdays + 1*bdays != 1*bdays


Using at least numpy version 1.7.0., try np.is_busday()

start = datetime.date.today().strftime("%Y-%m-%d")
end = datetime.date.today().strftime("%Y-%m-%d")

if start == end:

    # added code here
    if not np.is_busday(start):
        print("Not a Business day")

Since len of pd.bdate_range() tells us how many business days are in the supplied range of dates, we can cast this to a bool to determine if a range of a single day is a business day:

def is_business_day(date):
    return bool(len(pd.bdate_range(date, date)))