You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Python(Pandas)写入Excel数据时如何保留时间等数字格式

解决方法

你之前的操作存在两个核心问题:

  1. 用dt.strftime将时间对象转为了字符串类型,Pandas写入Excel时会将字符串识别为普通文本,因此默认是「常规」格式,后续格式设置也无法生效
  2. 默认的写入模式会覆盖Excel原有单元格的格式

可按对应场景操作实现需求:

场景1:新建Excel文件写入

使用xlsxwriter引擎可以直接在写入时设置单元格格式,示例代码如下:

import pandas as pd

# 1. 保留datetime类型,不要转成字符串
df['starttime'] = pd.to_datetime(df['starttime'])

# 2. 创建写入对象
with pd.ExcelWriter('output.xlsx', engine='xlsxwriter') as writer:
    df.to_excel(writer, sheet_name='Sheet1', index=False)
    workbook = writer.book
    worksheet = writer.sheets['Sheet1']
    
    # 3. 定义Excel时间格式,这里为12小时制带AM/PM的格式,可按需调整
    time_format = workbook.add_format({'num_format': 'hh:mm:ss AM/PM'})
    
    # 4. 给starttime列设置格式,假设starttime是表格第2列(对应Excel的B列),列宽设为18适配时间显示
    worksheet.set_column('B:B', 18, time_format)

场景2:写入已有Excel文件,不覆盖原有格式

使用openpyxl引擎的追加写入模式,保留原有格式后再调整目标列的数字格式,示例代码如下:

import pandas as pd
from openpyxl import load_workbook

# 1. 保留datetime类型,不要转成字符串
df['starttime'] = pd.to_datetime(df['starttime'])

# 2. 加载已有Excel文件,保留原有格式
book = load_workbook('existing_file.xlsx')
writer = pd.ExcelWriter(
    'existing_file.xlsx', 
    engine='openpyxl', 
    mode='a', 
    if_sheet_exists='overlay' # 覆盖写入已有内容不重置整个工作表
)
writer.book = book
writer.sheets = {ws.title: ws for ws in book.worksheets}

# 3. 写入数据,startrow设置为1即跳过表头行写入,按需调整
df.to_excel(writer, sheet_name='Sheet1', startrow=1, index=False, header=False)

# 4. 设置目标列的时间格式,假设starttime对应Excel的B列
worksheet = writer.sheets['Sheet1']
for cell in worksheet['B']:
    # 可直接自定义格式,比如24小时制改为'hh:mm:ss'
    cell.number_format = 'hh:mm:ss AM/PM'

# 5. 保存修改
writer.save()

内容的提问来源于stack exchange,提问作者Nobleman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 12:15:03