Pandas导出DataFrame到Excel时自定义日期时间格式不生效
问题原因
pandas 在写入 datetime 类型数据到 Excel 时,会为每个 datetime 单元格单独设置默认格式(包含微秒的 yyyy-mm-dd hh:mm:ss:microseconds 样式),这种单元格级别的格式优先级高于列级别格式,所以你通过 set_column 设置的列格式只会对无单独格式的单元格(比如空行、表头行)生效,数据行的格式不会被覆盖。
解决方案
方案一:直接在 ExcelWriter 中指定 datetime 格式(推荐)
这是最简便的实现方式,让 pandas 自动按指定格式写入 datetime 列,同时保留 datetime 类型,Excel 可正常识别为日期时间数值:
with pd.ExcelWriter('outputfile.xlsx', engine='xlsxwriter', datetime_format='dd-mm-yy hh:mm:ss') as writer: df.to_excel(writer, sheet_name='Sheet_1', index=False, startrow=2)
方案二:手动覆盖数据行的单元格格式
如果需要更灵活的格式定制,可以为数据行单独应用自定义格式:
with pd.ExcelWriter('outputfile.xlsx', engine='xlsxwriter') as writer: df.to_excel(writer, sheet_name='Sheet_1', index=False, startrow=2) workbook = writer.book worksheet = writer.sheets['Sheet_1'] datetime_format = workbook.add_format({'num_format':'dd-mm-yy hh:mm:ss'}) # 数据起始行:表头在startrow=2,数据从第3行(索引3)开始 start_data_row = 2 + 1 # 遍历所有数据行的A列,重新写入并指定格式 for row_idx in range(len(df)): excel_row = start_data_row + row_idx worksheet.write(excel_row, 0, df.iloc[row_idx]['datetime'], datetime_format) # 为列设置默认格式(处理后续新增行) worksheet.set_column('A:A', None, datetime_format)
内容的提问来源于stack exchange,提问作者Ant
相关产品推荐
相关产品推荐

