2017-02-23 3 views
1

Ich versuche, eine sehr saubere Methode zu finden die Anzahl der Stunden zwischen zwei Terminen ohne Wochenenden und bestimmte Feiertage zu berechnen.Wie finde ich die Anzahl der Stunden zwischen zwei Daten außer Wochenenden und bestimmten Feiertagen in Python? Geschäftszeiten Paket

Was ich herausgefunden habe ist, dass das Paket BusinessHours (https://pypi.python.org/pypi/BusinessHours/1.01) dies tun kann. Ich habe jedoch keine Anweisungen zur Verwendung des Pakets (die Syntax tatsächlich) gefunden, insbesondere zur Eingabe der Feiertage. Ich fand den ursprünglichen Code des Pakets (https://github.com/dnel/BusinessHours/blob/master/BusinessHours.py) aber immer noch nicht so sicher. Ich denke, es so etwas wie dies sein könnte:

date1 = pd.to_datetime('2017-01-01 00:00:00') 
date2 = pd.to_datetime('2017-01-22 12:00:00') 
import BusinessHour 
gethours(date1, date2, worktiming=[8, 17], weekends=[6, 7]) 

noch, wo kann ich Eingang die Feiertage? Und was, wenn ich nicht die Non-Office-Stunde ausschließen möchte, bin ich nur die worktiming auf worktiming=[0,23] anpassen?

Wer weiß, wie man dieses Paket benutzt, erzähl mir bitte davon. Ich schätze es.

P/s: Ich kannte einen Befehl in numpy die Anzahl der Arbeitstage zwischen zwei Terminen zu bekommen (busday_count), aber es gibt keinen Befehl das Ergebnis in Stunden zu erhalten. Alle anderen Befehle in pandas oder numpy, die die Aufgabe erfüllen können, sind ebenfalls willkommen. Danke

Antwort

0

Die aktuellste Pip-Installation dieses Pakets 1.2 hat einen Fehler in Zeile 51 mit "extraday", der in "extradays" geändert werden muss.

Ich habe auch das Internet nach einem funktionsfähigen Code durchforstet, um Geschäftszeiten und Geschäftstage zu berechnen. Dieses Paket hatte ein wenig Tweeking, funktioniert aber gut, wenn Sie es in Betrieb nehmen.

Dies ist, was ich in meinem Notebook haben:

#import BusinessHours 
from BusinessHours import BusinessHours as bh 
import numpy as np 
import pandas as pd 
from pandas import Series, DataFrame 

date1 = pd.to_datetime('2017-01-01 00:00:00') 
date2 = pd.to_datetime('2017-01-22 12:00:00') 
bh(date1, date2, worktiming=[8, 17], weekends=[6, 7]).gethours() 

Dies war auch im Quellcode:

''' 
holidayfile - A file consisting of the predetermined office holidays. 
Each date starts in a new line and currently must only be in the format 
dd-mm-yyyy 
''' 

this helps

0

dieses Paket ausprobieren genannte Business-Stunden in PyPi

Beispiel Code

from business_duration import businessDuration 
import pandas as pd 
from datetime import time,datetime 
import holidays as pyholidays 

startdate = pd.to_datetime('2017-01-01 00:00:00') 
enddate = pd.to_datetime('2017-01-22 12:00:00') 

holidaylist = pyholidays.Australia() 
unit='hour' 
#By default Saturday and Sunday are excluded 

print(businessDuration(startdate,enddate,holidaylist=holidaylist,unit=unit)) 
Output: 335.99611 

holidaylist: 
{datetime.date(2017, 1, 1): "New Year's Day", 
datetime.date(2017, 1, 2): "New Year's Day (Observed)", 
datetime.date(2017, 1, 26): 'Australia Day', 
datetime.date(2017, 3, 6): 'Canberra Day', 
datetime.date(2017, 4, 14): 'Good Friday', 
datetime.date(2017, 4, 15): 'Easter Saturday', 
datetime.date(2017, 4, 17): 'Easter Monday', 
datetime.date(2017, 4, 25): 'Anzac Day', 
datetime.date(2017, 6, 12): "Queen's Birthday", 
datetime.date(2017, 9, 26): 'Family & Community Day', 
datetime.date(2017, 10, 2): 'Labour Day', 
datetime.date(2017, 12, 25): 'Christmas Day', 
datetime.date(2017, 12, 26): 'Boxing Day'} 
Verwandte Themen