导出DataFrame到Excel时如何保留style.format设置的货币、百分比格式
DataFrame导出Excel保留自定义格式解决方案
pandas的style.format方法默认仅作用于Jupyter等交互环境的渲染展示,不会直接写入Excel文件,要保留货币、百分比等自定义格式可使用以下两种方案:
方案一:使用Styler对象直接导出(适配pandas 1.3.0及以上版本)
调用Styler.to_excel()而非原生DataFrame的to_excel方法,同时指定支持样式导出的引擎即可:
import pandas as pd # 示例数据 df = pd.DataFrame({ "商品名称": ["A","B","C"], "销售额": [1200.5, 3400.2, 2100.9], "同比增长率": [0.123, 0.278, -0.056] }) # 配置样式 styled_df = df.style \ .format({'销售额': '¥{:,.2f}', '同比增长率': '{:.2%}'}) # 导出到Excel,指定引擎为openpyxl或xlsxwriter均可 styled_df.to_excel("导出结果.xlsx", engine="openpyxl", index=False)
方案二:通过xlsxwriter指定列格式(兼容性更强)
该方案写入的是Excel原生单元格格式,后续编辑不会丢失格式,适配所有pandas版本:
import pandas as pd # 示例数据 df = pd.DataFrame({ "商品名称": ["A","B","C"], "销售额": [1200.5, 3400.2, 2100.9], "同比增长率": [0.123, 0.278, -0.056] }) # 创建Excel写入对象 writer = pd.ExcelWriter("导出结果.xlsx", engine="xlsxwriter") df.to_excel(writer, sheet_name="数据", index=False) # 获取工作簿、工作表实例 workbook = writer.book worksheet = writer.sheets['数据'] # 定义自定义格式 currency_format = workbook.add_format({'num_format': '¥#,##0.00'}) percent_format = workbook.add_format({'num_format': '0.00%'}) # 给对应列绑定格式,可同时设置列宽 worksheet.set_column('B:B', 15, currency_format) # 销售额列为B列 worksheet.set_column('C:C', 15, percent_format) # 同比增长率列为C列 # 保存文件 writer.close()
注意事项
- 优先选择方案二,兼容性更高,不会出现样式丢失问题
- 如果使用方案一出现样式丢失,可先升级
openpyxl依赖到最新版本,旧版本对Styler导出的支持不完善
内容的提问来源于stack exchange,提问作者Andy
相关产品推荐
相关产品推荐

