Python에서 가장 최근의 전 영업일
현재 날짜에서 영업일 을 빼야 합니다.
현재 가장 최근 영업일에 항상 실행해야하는 코드가 있습니다. 그래서 우리가 월요일부터 금요일까지라면 오늘 일 수 있지만 토요일이나 일요일이면 주말 전 금요일로 다시 설정해야합니다. 나는 현재 이것을하기위한 꽤 투박한 코드가있다.
lastBusDay = datetime.datetime.today()
if datetime.date.weekday(lastBusDay) == 5: #if it's Saturday
lastBusDay = lastBusDay - datetime.timedelta(days = 1) #then make it Friday
elif datetime.date.weekday(lastBusDay) == 6: #if it's Sunday
lastBusDay = lastBusDay - datetime.timedelta(days = 2); #then make it Friday
더 좋은 방법이 있습니까?
예를 들어 timedelta에게 달력 일이 아닌 평일에 일하도록 말할 수 있습니까?
판다를 사용하세요!
import pandas as pd
# BDay is business day, not birthday...
from pandas.tseries.offsets import BDay
# pd.datetime is an alias for datetime.datetime
today = pd.datetime.today()
print today - BDay(4)
오늘은 9 월 26 일 목요일이므로 다음과 같은 결과를 얻을 수 있습니다.
datetime.datetime(2013, 9, 20, 14, 8, 4, 89761)
추가 라이브러리를 설치하려면 몇 가지 옵션이있는 것 같습니다.
이 게시물은 dateutil로 근무일을 정의하는 방법을 설명합니다 .
http://coding.derkeiler.com/Archive/Python/comp.lang.python/2004-09/3758.html
BusinessHours를 사용하면 휴일 목록 등을 사용자 정의하여 근무 시간 (및 연장 근무일)을 정의 할 수 있습니다.
http://pypi.python.org/pypi/BusinessHours/
면책 조항 : 저는 저자입니다 ...
나는 정확히 이것을 수행하는 패키지를 작성했습니다. 비즈니스 날짜 계산. 사용자 지정 주 지정 및 공휴일을 사용할 수 있습니다.
재무 데이터로 작업하는 동안이 정확한 문제가 있었고 사용 가능한 솔루션을 특별히 쉽게 찾지 못했기 때문에 하나를 작성했습니다.
이것이 다른 사람들에게 유용하기를 바랍니다.
https://pypi.python.org/pypi/business_calendar/
이 코드가 도움이 될 수 있습니다.
lastBusDay = datetime.datetime.today()
shift = datetime.timedelta(max(1,(lastBusDay.weekday() + 6) % 7 - 3))
lastBusDay = lastBusDay - shift
아이디어는 월요일에 3 일, 일요일 2, 다른 날에는 1로 돌아 가야한다는 것입니다.
이 명령문 (lastBusDay.weekday() + 6) % 7
은 월요일을 0에서 6으로 변경합니다.
이것이 성능면에서 더 나을지 정말 모릅니다.
미국 공휴일과 주말을 건너 뛰고 싶다면 이것은 나를 위해 일했습니다 (pandas 0.23.3 사용).
import pandas as pd
from pandas.tseries.holiday import USFederalHolidayCalendar
from pandas.tseries.offsets import CustomBusinessDay
US_BUSINESS_DAY = CustomBusinessDay(calendar=USFederalHolidayCalendar())
july_5 = pd.datetime(2018, 7, 5)
result = july_5 - 2 * US_BUSINESS_DAY # 2018-7-2
파이썬 날짜 객체로 변환하려면 다음을 수행했습니다.
result.to_pydatetime().date()
timeboard
패키지는 이것을합니다.
날짜가 2017 년 9 월 4 일이라고 가정합니다. 월요일 임에도 불구하고 미국의 공휴일 (노동절)이었습니다. 따라서 가장 최근 영업일은 9 월 1 일 금요일이었습니다.
>>> import timeboard.calendars.US as US
>>> clnd = US.Weekly8x5()
>>> clnd('04 Sep 2017').rollback().to_timestamp().date()
datetime.date(2017, 9, 1)
영국에서는 2017 년 9 월 4 일이 정규 영업일 이었으므로 가장 최근 영업일은 그 자체였습니다.
>>> import timeboard.calendars.UK as UK
>>> clnd = UK.Weekly8x5()
>>> clnd('04 Sep 2017').rollback().to_timestamp().date()
datetime.date(2017, 9, 4)
면책 조항 : 저는 타임 보드의 작성자입니다.
이것은 물론 공휴일없이 근무일의 생성자에게 줄 것이고 stop은 datetime.datetime 객체입니다. 공휴일이 필요한 경우 공휴일 목록과 함께 추가 논의를하고 'IFology'로 확인하십시오 ;-)
def workingdays(stop, start=datetime.date.today()):
while start != stop:
if start.weekday() < 5:
yield start
start += datetime.timedelta(1)
나중에 다음과 같이 셀 수 있습니다.
workdays = workingdays(datetime.datetime(2015, 8, 8))
len(list(workdays))
다음과 같은 것을 시도해보십시오.
lastBusDay = datetime.datetime.today()
if datetime.date.weekday(lastBusDay) not in range(0,5):
lastBusDay = 5
def getNthBusinessDay(startDate, businessDaysInBetween):
currentDate = startDate
daysToAdd = businessDaysInBetween
while daysToAdd > 0:
currentDate += relativedelta(days=1)
day = currentDate.weekday()
if day < 5:
daysToAdd -= 1
return currentDate
참고URL : https://stackoverflow.com/questions/2224742/most-recent-previous-business-day-in-python
'Programing' 카테고리의 다른 글
프로젝트를 grunt로 빌드 할 때 Fontawesome이 작동하지 않습니다. (0) | 2020.11.20 |
---|---|
파이썬으로 문자열에서 기호를 제거하는 방법은 무엇입니까? (0) | 2020.11.20 |
UITableViewCell 문제의 가운데 맞춤 텍스트 (0) | 2020.11.20 |
Mogenerator 매개 변수는 어떻게 작동하며 Xcode를 통해 전송할 수 있습니까? (0) | 2020.11.20 |
Ubuntu 10.10 (Maverick Meerkat)에 Sun Java JDK를 설치하는 방법은 무엇입니까? (0) | 2020.11.20 |