使用Pandas XlsxWriter将日期列格式化为'mmm-yy'失败问题排查
问题原因
Pandas 在调用 to_excel() 写入 Excel 时,会自动为 datetime 类型的列生成默认的 Excel 日期格式,这个默认格式的优先级高于后续通过 set_column() 设置的自定义格式,导致你设置的 mmm-yy 格式无法生效。
解决方案
方案一:直接在 to_excel() 中指定日期格式(推荐)
通过 datetime_format 参数直接指定日期输出格式,无需后续手动设置列格式,代码更简洁:
import pandas as pd df = pd.DataFrame({'test_date': pd.date_range('1/1/2022', periods=12, freq='M')}) with pd.ExcelWriter('format-01.xlsx', engine='xlsxwriter') as writer: # 写入时直接指定日期格式为'mmm-yy' df.to_excel(writer, sheet_name='test', index=False, datetime_format='mmm-yy') workbook = writer.book worksheet = writer.sheets['test'] # 仅设置列宽即可 worksheet.set_column('A:A', 30)
方案二:手动覆盖单元格格式
如果需要保留手动设置格式的逻辑,可以遍历日期列的单元格,为每个单元格单独应用自定义格式(跳过表头行):
import pandas as pd df = pd.DataFrame({'test_date': pd.date_range('1/1/2022', periods=12, freq='M')}) with pd.ExcelWriter('format-01.xlsx', engine='xlsxwriter') as writer: df.to_excel(writer, sheet_name='test', index=False) workbook = writer.book worksheet = writer.sheets['test'] # 创建自定义日期格式 custom_date_format = workbook.add_format({'num_format': 'mmm-yy'}) # 遍历日期列的所有数据行(从第2行开始,索引从1起) for row_idx in range(1, len(df) + 1): # 获取对应行的日期值,写入单元格并应用格式 worksheet.write(row_idx, 0, df.iloc[row_idx - 1]['test_date'], custom_date_format) # 设置列宽 worksheet.set_column('A:A', 30)
两种方案都能让 Excel 中的日期列显示为 Jan-22、Feb-22 这类符合 mmm-yy 格式的样式。
内容的提问来源于stack exchange,提问作者sfgroups
相关产品推荐
相关产品推荐

