Как печатать timedelta без долей секунд
import pandas as pd
from datetime import datetime as dt
doc = pd.read_csv('document.csv', sep=';', encoding='cp1251')
service_type = doc['Услуга']
for i in service_type.unique():
fltr = doc.loc[service_type == i]
fltr['Время выполнения'] = pd.to_timedelta(fltr['Время выполнения'])
summ = fltr['Время выполнения'].sum()
if len(fltr['Время выполнения']) > 0:
final = summ/len(fltr['Время выполнения'])
print(i+":", '\n', final)
на выходе имеем числа формата
days 04:49:51.200000
0 days 11:04:20.833333333
0 days 00:36:24
и т.д.
Как можно избавиться от чисел после точки?
Ответы (2 шт):
Автор решения: insolor
→ Ссылка
Первый вариант - создаете новый объект timedelta, в котором количество секунд округляете до целого:
from datetime import timedelta
td = timedelta(seconds=123456.789)
print(td) # 1 day, 10:17:36.789000
td2 = timedelta(seconds=int(td.total_seconds()))
print(td2) # 1 day, 10:17:36
Другой вариант - в исходниках класса timedelta смотрите метод __str__, создаете на его основе свою функцию форматирования:
# def __str__(self):
# mm, ss = divmod(self._seconds, 60)
# hh, mm = divmod(mm, 60)
# s = "%d:%02d:%02d" % (hh, mm, ss)
# if self._days:
# def plural(n):
# return n, abs(n) != 1 and "s" or ""
# s = ("%d day%s, " % plural(self._days)) + s
# if self._microseconds:
# s = s + ".%06d" % self._microseconds
# return s
def format_timedelta(td: timedelta):
mm, ss = divmod(td.seconds, 60)
hh, mm = divmod(mm, 60)
s = "%d:%02d:%02d" % (hh, mm, ss)
if td.days:
def plural(n):
return n, abs(n) != 1 and "s" or ""
s = ("%d day%s, " % plural(td.days)) + s
# убираем отображение микросекунд
return s
print(format_timedelta(timedelta(seconds=123456.789))) # 1 day, 10:17:36
Автор решения: SergFSM
→ Ссылка
у pandas.timedelta есть метод round, а то, что делает ваш код, можно сделать с помощью группировки без цикла, примерно так:
doc['Время выполнения'] = pd.to_timedelta(doc['Время выполнения'])
res = doc.groupby('Услуга')['Время выполнения'].mean().round('s').reset_index()
# получите дата фрейм такого вида
print(res)
'''
Услуга Время выполнения
0 a 0 days 12:50:12
1 b 0 days 15:20:12
2 c 0 days 17:50:06