我有几秒钟内需要转换为 H:MM:SS 的数据。当这些数据进来时,它在单独的列中也有一个日期字段。我需要将秒数据转换为 H:MM:SS 但将日期字段保留为日期。我需要输出看起来像 Excel 中所需的输出。
我试过使用 Excel writer 并设置 date_format 或 datetime_format 的默认格式,但是这会转换 Excel 文件中的所有日期时间列。jmcnamara 之前的回复表明这是因为单元格格式优先于列或行格式。
这是我已经开始工作的一些示例代码,但它不是很pythonic。它涉及将数据框保存到 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 中作为字符串读取。我需要能够从时间戳中得出平均值和总和。
相关分类