Рубрики
Без рубрики

Использование Python, чтобы вычислить начать последние даты

Налоговое время на нас в Австралии, а также из-за Covid19, это налоговое время немного отличается, поскольку нам нужно … с меткой Python, даты.

Налоговое время на нас в Австралии, и благодаря Covid19, это налоговое время немного отличается, поскольку мы должны вычислять для нашей работы от стоимости дома (для некоторых из нас, которые обычно не работают из дома).

В Австралии налоговая ведомство представило «метод ярлыка» для вычисления для вычетов. Посмотреть здесь Больше подробностей.

Метод ярлыка просто претендует на вычет 80 центов за каждый час, работающий из дома. Мы знаем, сколько часов мы работаем за день, но как мы вычисляем общее количество дней, исключая праздничные дни и выходные, не вручную подсчитывая дни в календаре?

Мы постараемся ответить на этот вопрос в этом сообщении в блоге.

1. Установка для требуемых пакетов

Мы будем использовать Python (я использовал 3.8.4 на момент написания этой записи) для вычисления в течение количества дней. Давайте установим наши необходимые пакеты через PIP.

> pip install numpy
> pip install pandas
> pip install holidays

2. Давайте получим кодирование

Во-первых, давайте импортируем все наши пакеты:

import pandas as pd
import numpy as np
import holidays

Поэтому нам нужно будет поставлять наш началь и конец даты строки и преобразовывать их в DateTime, используя Pandas to_dateTime Отказ

Например, если я работал из дома с 18 марта по 30 июня, я снабжу 18 марта по 1 июля. Мы должны добавить +1 день, так как это требуется на Numpy’s busday_count функция. Мы поговорим больше об этом в более поздней части.

Давайте также позвоним .date () В конце исключить время от DateTime.

start = pd.to_datetime('18/03/2020', format='%d/%m/%Y').date()
end = pd.to_datetime('01/07/2020', format='%d/%m/%Y').date()

Используя Праздники Пакет, мы можем легко подобрать праздники в любой стране, которую он поддерживает. Я живу в Австралии, поэтому мы используем это.

Ниже приведен что каникулы. Австралия содержит.

>>> print(*holidays.Australia(years=2020).items(), sep="\n")
(datetime.date(2020, 1, 1), "New Year's Day")
(datetime.date(2020, 1, 26), 'Australia Day')
(datetime.date(2020, 1, 27), 'Australia Day (Observed)')
(datetime.date(2020, 4, 10), 'Good Friday')
(datetime.date(2020, 4, 13), 'Easter Monday')
(datetime.date(2020, 4, 25), 'Anzac Day')
(datetime.date(2020, 12, 25), 'Christmas Day')
(datetime.date(2020, 12, 26), 'Boxing Day')
(datetime.date(2020, 12, 28), 'Boxing Day (Observed)')

Это по умолчанию для Акт Отказ

Штаты могут иметь разные праздники. День рождения королевы от дня рождения 8 июня не в списке по умолчанию, поскольку оно не то же самое в NSW.

Так что давайте добавим это, предоставив POV аргумент NSW Отказ

# First, create our holidays lookup
nsw_holidays = [*holidays.Australia(years=2020, prov='NSW')]

# Note, add any holiday or absences manually if any
# sick_leave = pd.to_datetime('29/06/2020', format='%d/%m/%Y').date()
# nsw_holidays[sick_leave] = "Colds"

Теперь, когда мы все настройки, давайте назовем busday_count функция в numpy.

busday_count Функция будет подсчитать количество дней между 2 датами, исключая дату окончания.

По словам Numpy’s Документация Это функция подписи:

numpy.busday_count(begindates,
                   enddates,
                   weekmask='1111100',
                   holidays=[],
                   busdaycal=None,
                   out=None)

Обратите внимание, что недельная маска – это логическое представление о том, какие дни рассчитывают за неделю. Это понедельник по воскресенье представительством. Таким образом, 2 Zeros в конце означает, что мы исключаем субботы и воскресенья, которые мы действительно хотим.

Теперь, когда у нас есть nsw_holidays , нам нужно назначить это на Праздники параметр. Обратите внимание, что nsw_holidays – это словарь, поэтому мы распаковываем только ключи.

Мы будем держать busdaycal и OUT не так.

Так что теперь мы считаем наши дни ВЧ.

wfh_day_count = np.busday_count(start, end, holidays=[*nsw_holidays.keys()])

wfh_day_count – это общее количество дней, которые вы работали из дома с 18 марта по 30 июня.

Вот весь исходный код:

import pandas as pd
import numpy as np
import holidays

start = pd.to_datetime('18/03/2020', format='%d/%m/%Y').date()
end = pd.to_datetime('01/07/2020', format='%d/%m/%Y').date()

nsw_holidays = holidays.Australia(years=2020, prov='NSW')

print(*nsw_holidays.items(), sep='\n')

wfh_day_count = np.busday_count(start, end, holidays=[*nsw_holidays.keys()])

print(f'Total WFH Days {wfh_day_count}')

И это все. Я надеюсь, что это поможет кому-либо искать быстрый способ вычислить.

Оригинал: “https://dev.to/deanagan/using-python-to-compute-start-to-end-dates-5e98”