我需要几秒钟的数据才能转换为H:MM:SS。当输入此数据时,它在单独的列中还有一个日期字段。我需要将秒数据转换为H:MM:SS,但将date字段保留为日期。我需要使输出看起来像Excel中所需的输出。
所需输出示例: excel output
我尝试使用Excel书写器并设置date_format或datetime_format的默认格式,但是这会转换excel文件中的所有datetime列。来自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中也不能作为字符串读取。我需要能够从时间戳导出平均值和总和。
谢谢!
答案 0 :(得分:0)
在上面的评论中,查理·克拉克(Charlie Clark)提出了建议之后,我使用了OpenpyXL的utils软件包将熊猫数据框转换为openpyxl的工作簿。转换为工作簿后,我仍然可以在其余脚本中使用相同的代码。
[[1, 3, 4, 5],
[2, 2, 3, 4],
[3, 2, 3, 4]]