У меня есть данные в секундах, которые мне нужно преобразовать в H: MM: SS. Когда эти данные поступают, у них также есть поле даты в отдельном столбце. Мне нужно преобразовать данные секунд в H: MM: SS, но сохранить поле даты как дату. Мне нужно, чтобы вывод был похож на желаемый вывод в Excel.
Пример желаемого выхода:
превосходный вывод
Я попытался использовать Excel Writer и установить формат по умолчанию date_format или datetime_format, однако это преобразует все столбцы datetime в файле excel. Предыдущие ответы от jmcnamara указывают, что это потому, что формат ячейки имеет приоритет над форматом столбца или строки.
Вот пример кода, который я получил, но он не очень питонический. Это включает сохранение кадра данных в Excel, но затем повторное открытие этого точного файла.
# imports
import pandas as pd
import random
from openpyxl import load_workbook
from openpyxl.styles import NamedStyle
# generate data
numbers = (random.sample(range(500, 2000), 10))
df = pd.DataFrame(numbers)
df.rename(columns={df.columns[0]:'Time'}, inplace=True)
# convert to time
df['Timestamp'] = pd.to_timedelta(df['Time'], unit='s') + pd.Timestamp(0)
#df['Openpyxl Time'] = pd.to_timedelta(df['Time'], unit='s') + pd.Timestamp(0)
# write to file
writer = pd.ExcelWriter('test.xlsx', engine = 'xlsxwriter')
df.to_excel(writer, sheet_name= 'Sheet 1', index=False)
writer.save()
# load just created file
wb = load_workbook('test.xlsx')
ws = wb.active
# set format style
date_style = NamedStyle(name='datetime', number_format='h:mm:ss')
# simple way to format but also formats column header
for cell in ws['C']:
cell.style = date_style
#more complex way to format, but does not format column header
# for row in ws.iter_rows('C{}:C{}'.format(ws.min_row+1, ws.max_row)):
# for cell in row:
# cell.style = date_style
wb.save('test.xlsx')
wb.close()
Как мне переписать это, чтобы не пришлось заново открывать файл Excel, чтобы изменить разные столбцы на разные форматы даты и времени?
Желаемый вывод также не может быть прочитан как строка в Excel. Я должен быть в состоянии получить средние значения и сумму из отметок времени.
Спасибо!