Pandas: получите количество рабочих дней между датой начала и окончания
Вы можете использовать следующие методы, чтобы получить рабочие дни в пандах:
Способ 1: выберите рабочие дни (исключая все выходные).
business_days = pd. bdate_range (' 2022-01-01 ', ' 2022-12-31 ')
Способ 2. Получите рабочие дни (исключая все выходные и праздничные дни).
from pandas. tseries . holiday import USFederalHolidayCalendar
from pandas. tseries . offsets import CustomBusinessDay
#define US business days
us_bus = CustomBusinessDay(calendar=USFederalHolidayCalendar())
#get all business days between certain start and end dates
us_business_days = pd. bdate_range (' 2022-01-01 ', ' 2022-12-31 ', freq=us_bus)
Следующие примеры показывают, как использовать каждый метод на практике.
Пример 1. Получение рабочих дней (исключая все выходные).
Один из способов получить список рабочих дней между двумя датами в pandas — использовать функцию bdate_range() .
Обратите внимание, что эта функция просто подсчитывает количество дней между датой начала и датой окончания, исключая выходные дни.
Например, мы можем использовать следующий синтаксис для подсчета количества рабочих дней с 01.01.2022 по 31.12.2022:
import pandas as pd
#get all business days between certain start and end dates
business_days = pd. bdate_range (' 2022-01-01 ', ' 2022-12-31 ')
#view first ten business days
print (business_days[0:10])
DatetimeIndex(['2022-01-03', '2022-01-04', '2022-01-05', '2022-01-06',
'2022-01-07', '2022-01-10', '2022-01-11', '2022-01-12',
'2022-01-13', '2022-01-14'],
dtype='datetime64[ns]', freq='B')
#view total number of business days
len (business_days)
260
Объект business_days содержит каждый рабочий день между указанными датами начала и окончания.
И с помощью функции len() мы видим, что общее количество рабочих дней между указанными датами начала и окончания составляет 260 .
Пример 2. Получение рабочих дней (исключая все выходные и праздничные дни).
Чтобы получить список рабочих дней между двумя датами в pandas, исключающий выходные и федеральные праздники, нам нужно использовать функции модуля pandas tseries .
Например, мы можем использовать следующий синтаксис для подсчета количества рабочих дней (все дни, исключая выходные и праздничные дни) между 01.01.2022 и 31.12.2022:
from pandas. tseries . holiday import USFederalHolidayCalendar
from pandas. tseries . offsets import CustomBusinessDay
#define US business days
us_bus = CustomBusinessDay(calendar=USFederalHolidayCalendar())
#get all business days between certain start and end dates
us_business_days = pd. bdate_range (' 2022-01-01 ', ' 2022-12-31 ', freq=us_bus)
#view first ten business days
print (us_business_days[0:10])
DatetimeIndex(['2022-01-03', '2022-01-04', '2022-01-05', '2022-01-06',
'2022-01-07', '2022-01-10', '2022-01-11', '2022-01-12',
'2022-01-13', '2022-01-14'],
dtype='datetime64[ns]', freq='C')
#view total number of business days
len (us_business_days)
250
Объект с именем us_business_days содержит все рабочие дни (все дни, кроме выходных и праздничных дней) между указанными датами начала и окончания.
И с помощью функции len() мы видим, что общее количество рабочих дней между указанными датами начала и окончания составляет 250 .
Дополнительные ресурсы
В следующих руководствах объясняется, как выполнять другие распространенные операции в pandas:
Как добавить и вычесть дни из даты в Pandas
Как преобразовать DateTime в дату в Pandas
Как извлечь месяц из даты в Pandas