Расчет нет. часов за интервал времени, чтобы определить, будь то будний день или выходные - PullRequest
0 голосов
/ 06 сентября 2018

Положение: Вычисление количества часов в будний день и количества часов в выходные / праздничные дни за определенный промежуток времени. Данные извлекаются из файла Excel и помещаются в кадр данных с помощью панд.

Example of Dataframe Input:
                 Start                      End
      1     06-09-2018 02:00:00      08-09-2018 01:00:00 
      2     08-09-2018 02:00:00      08-09-2018 04:00:00 
      3     08-09-2018 02:00:00      10-09-2018 01:00:00 

Example of Dataframe Output at the end:
                Start                      End                 WD/WE
      1     06-09-2018 02:00:00      08-09-2018 01:00:00        WD
      2     08-09-2018 02:00:00      08-09-2018 04:00:00        WE
      3     08-09-2018 02:00:00      10-09-2018 01:00:00        WE

Начиная с 1-го ряда, используя код, мы рассчитываем количество часов, которые лежат в будний день и выходные / праздничные дни. Подсчитав вручную, мы получим 46 часов в будние дни и 1 выходной / праздничные часы. Таким образом, часы выходных / праздничных дней <= часы дня недели, таким образом возвращая строку "WD" </p>

В настоящее время я пытаюсь использовать рабочие дни, панды, дату и время, openpyxl.

data_check = pd.read_excel('C:\\excel path.xlsx',header=0)
df_check = pd.DataFrame(data_check,columns=['Start Date and Time','End Date and Time'])
#Creating dataframe
df_check['Start Date and Time'] = pd.to_datetime(df_check['Start Date and Time'])
df_check['End Date and Time'] = pd.to_datetime(df_check['End Date and Time'])

#Simplifying dataframe names
df_s= pd.DataFrame({'Start Date and Time': df_check['Start Date and Time']})
df_u= pd.DataFrame({'End Date and Time': df_check['End Date and Time']})

#Indicating holidays
holidays= ['22-08-2018','06-11-2018','25-12-2018']

Я понимаю, что мой код немного грязный, так как я новичок в Python и все еще пытаюсь заставить вещи работать. Я застрял после попытки написать код для запуска через мой фрейм данных, чтобы вычислить нет. в будние часы и нет. выходных / праздничных часов. Я искал и читал о том, как определить, является ли день рабочим днем ​​или выходным / праздничным днем, но я понятия не имею, как запустить его через мой фрейм данных.

Надеюсь, кто-то сможет помочь.

Протестировано до сих пор: Код1: не работает. AttributeError: объект DataFrame не имеет атрибута calendar. Возможно, я неправильно набираю код.

df_wdwe1 = np.where(df_s.calendar.weekday(year, month, day)>=6, "Weekends","Weekdays")

1 Ответ

0 голосов
/ 06 сентября 2018

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

Вы можете использовать min() и max(), чтобы получить минимальное и максимальное значения, как в этом примере:

Найти самый старый / самый молодой объект даты и времени в списке

Вот пример использования datetime:

Преобразование строки в дату и время

Для определения дня недели на основе предоставленной даты вы можете calendar добавить более конкретную функцию calendar.weekday(year, month, day) который возвращает числа от '0' до '7', где 0 - понедельник, а 7 - воскресенье

Что касается праздника, я бы не знал, я не думаю, что есть что-то более точное, чем в calendar, учитывая, что праздники основаны на стране. Вы можете проверить некоторые пользовательские библиотеки на github.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...