How to Calculate Business Days in Python
Whether you are an accountant, a project manager, or a business owner, calculating the number of business days between two dates can be a common task. It is important to know the number of business days between two dates for scheduling appointments, planning events, and calculating salaries.
In this article, we will explore different methods you can use to calculate business days in Python.
Calculating Business Days Between Two Dates Using Numpy
Numpy is a popular Python library for scientific computing, which includes a function called busday_count()
. This function provides a simple way to calculate the number of business days between two dates.
Here is an example:
import numpy as np
start_date = np.datetime64('2021-01-01')
end_date = np.datetime64('2021-01-31')
business_days = np.busday_count(start_date, end_date)
print(business_days)
The output will be 23, the number of business days in January 2021 excluding weekends and public holidays. Note that the start and end dates must be in the numpy datetime format.
Getting Business Days Between Two Dates Without Numpy
If you do not want to use numpy, you can calculate business days using Python’s built-in functions. Here is an example:
import datetime
def business_days(start_date, end_date):
weekdays = range(0, 5) # Monday to Friday
ndays = (end_date - start_date).days + 1
for day in range(0, ndays):
date = start_date + datetime.timedelta(days=day)
if date.weekday() in weekdays:
yield date
print(len(list(business_days(datetime.date(2021, 1, 1), datetime.date(2021, 1, 31)))))
The output will be 23, the number of business days in January 2021 excluding weekends. Note that this method does not exclude public holidays.
Excluding Weekends and Holidays
Excluding public holidays can be a more complex task, as the list of public holidays varies depending on the country or region. One way to exclude holidays is to create a list of public holidays and exclude them from the list of business days.
Here is an example:
import datetime
def business_days(start_date, end_date, holidays=[]):
weekdays = range(0, 5) # Monday to Friday
ndays = (end_date - start_date).days + 1
for day in range(0, ndays):
date = start_date + datetime.timedelta(days=day)
if date.weekday() in weekdays and date not in holidays:
yield date
holidays = [datetime.date(2021, 1, 1), datetime.date(2021, 1, 18)] # New Year's Day and Martin Luther King Jr. Day
print(len(list(business_days(datetime.date(2021, 1, 1), datetime.date(2021, 1, 31), holidays))))
The output will be 21, the number of business days in January 2021 excluding weekends and holidays.
Getting Number of Business Days in a Month
If you want to get the number of business days in a specific month, you can use the same methods as above and specify the start and end dates of the month. Here is an example using numpy:
import numpy as np
year_month = '2021-01'
start_date = np.datetime64(year_month + '-01')
end_date = np.datetime64(year_month + '-31')
business_days = np.busday_count(start_date, end_date)
print(business_days)
The output will be 21, the number of business days in January 2021 excluding weekends and public holidays.
Getting All Business Days in a Month
If you want to get all the business days in a specific month, you can use numpy’s busday_offset()
function. Here is an example:
import numpy as np
year_month = '2021-01'
start_date = np.datetime64(year_month + '-01')
end_date = np.datetime64(year_month + '-31')
business_days = np.busday_offset(start_date, 0, roll='forward', weekmask='Mon Tue Wed Thu Fri')
print(business_days)
The output will be an array of numpy.datetime64 objects representing all the business days in January 2021.
Getting the Last Business Day of a Month
If you want to get the last business day of a specific month, you can use Python’s built-in calendar module. Here is an example:
import calendar
import datetime
def last_business_day(year, month):
last_day = max(calendar.monthcalendar(year, month)[-1])
date = datetime.date(year, month, last_day)
weekdays = range(0, 5) # Monday to Friday
while date.weekday() not in weekdays:
date -= datetime.timedelta(days=1)
return date
print(last_business_day(2021, 1))
The output will be 29 January 2021, the last business day of January 2021.
Conclusion
Calculating business days between two dates can be a useful skill for many professionals dealing with scheduling and planning. In this article, we explored different methods you can use to calculate business days in Python, including using numpy’s busday_count()
function and Python’s built-in functions.
We also looked at how to exclude weekends and holidays, get the number of business days in a month, get all business days in a month, and get the last business day of a month.
Commonly Used Modules in Calculating Business Days in Python
Python is a dynamic programming language that provides many useful modules for a wide range of applications. In the previous article, we explored different methods to calculate the number of business days between two dates.
In this article, we will dive deeper into the modules commonly used in calculating business days in Python.
Numpy Module
Numpy is a popular Python library for scientific computing and data analysis. It provides support for multidimensional arrays, making it an ideal module for many scientific and engineering applications.
In calculating business days, numpy is often used to represent dates as numpy.datetime64
objects and to perform calculations using the busday_count()
and busday_offset()
functions. For example, to calculate the number of business days between two dates using numpy, we can use the following code:
import numpy as np
start_date = np.datetime64('2021-01-01')
end_date = np.datetime64('2021-01-31')
business_days = np.busday_count(start_date, end_date)
print(business_days)
This code will print the number of business days between January 1, 2021, and January 31, 2021, excluding weekends and public holidays.
Datetime Module
The datetime
module in Python provides tools for working with dates and times. It includes classes for working with dates, times, and timedeltas.
In calculating business days, the datetime
module is often used to represent dates as datetime.date
objects and to perform date arithmetic using the timedelta
object. For example, to calculate the number of business days between two dates using the datetime
module, we can use the following code:
import datetime
def business_days(start_date, end_date):
weekdays = range(0, 5) # Monday to Friday
ndays = (end_date - start_date).days + 1
for day in range(0, ndays):
date = start_date + datetime.timedelta(days=day)
if date.weekday() in weekdays:
yield date
print(len(list(business_days(datetime.date(2021, 1, 1), datetime.date(2021, 1, 31)))))
This code will print the number of business days between January 1, 2021, and January 31, 2021, excluding weekends.
Timedelta Object
The timedelta
object in Python represents a duration of time. It is often used in conjunction with the datetime
module to perform date arithmetic.
The timedelta
object can represent durations in days, seconds, microseconds, milliseconds, minutes, hours, and weeks. For example, to calculate the number of days between two dates without using the busday_count()
function, we can use the timedelta
object as follows:
import datetime
def business_days(start_date, end_date):
weekdays = range(0, 5) # Monday to Friday
delta = datetime.timedelta(days=1)
ndays = (end_date - start_date).days + 1
count = 0
for day in range(0, ndays):
date = start_date + delta * day
if date.weekday() in weekdays:
count += 1
return count
print(business_days(datetime.date(2021, 1, 1), datetime.date(2021, 1, 31)))
This code will print the number of business days between January 1, 2021, and January 31, 2021, excluding weekends.
Calendar Module
The calendar
module in Python provides functions for working with calendars, including determining the weekdays in a given month. In calculating business days, the calendar
module is often used to determine the last day of a given month and the weekdays in that month.
For example, to determine the last business day of a given month using the calendar
module, we can use the following code:
import calendar
import datetime
def last_business_day(year, month):
last_day = max(calendar.monthcalendar(year, month)[-1])
date = datetime.date(year, month, last_day)
weekdays = range(0, 5) # Monday to Friday
while date.weekday() not in weekdays:
date -= datetime.timedelta(days=1)
return date
print(last_business_day(2021, 1))
This code will print the date of the last business day of January 2021.
Conclusion
In this article, we explored the modules commonly used in calculating business days in Python, including numpy
, datetime
, timedelta
, and calendar
. These modules provide powerful tools for representing and manipulating dates and times, performing date arithmetic, and working with calendars.
By leveraging these modules, you can easily calculate the number of business days between two dates, determine the number of business days in a given month, and find the last business day of a given month. In summary, calculating business days in Python is a crucial skill for various professionals.
In this article, we have explored the commonly used modules in calculating business days, including numpy
, datetime
, timedelta
, and calendar
. These modules provide powerful tools for performing date arithmetic, working with calendars, and representing dates and times.
By using these modules, you can easily calculate business days between two dates, determine the number of business days in a month, and find the last business day of a month. Overall, understanding these modules is an essential step in streamlining your work and minimizing errors when working with dates in your professional or personal life.