使用Python(Pandas)写入Excel数据时如何保留时间等数字格式
解决方法
你之前的操作存在两个核心问题:
- 用
dt.strftime将时间对象转为了字符串类型,Pandas写入Excel时会将字符串识别为普通文本,因此默认是「常规」格式,后续格式设置也无法生效 - 默认的写入模式会覆盖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
相关产品推荐
相关产品推荐

