导出至Excel时如何保留Pandas中.bar()的格式
问题描述
我能成功导出带有背景色、字体颜色的DataFrame格式,但在导出通过以下代码生成的带.bar()格式的DataFrame时遇到困难:
df_user_export = df_user.apply(lambda x : x.drop(x.index[:1])).style.format(precision =0).bar() df_user_export # 这是我需要导出的目标格式对象
我使用此前导出背景色、字体格式有效的代码尝试导出,但.bar()生成的条形格式无法保留:
df_user_export.to_excel('df_user_export.xlsx',sheet_name='df_user_export', engine='openpyxl')
我希望保留该DataFrame在Python中显示的条形格式,已查阅openpyxl和pandas文档仍未找到解决方法,恳请帮助。
解决方法
Pandas的Styler.bar()生成的条形格式,直接使用openpyxl引擎导出时不会被保留,以下是两种可行的解决方式:
方法1:改用xlsxwriter引擎
xlsxwriter对Pandas Styler的格式支持更完善,能直接保留.bar()生成的条形背景。步骤如下:
- 先安装xlsxwriter:
pip install xlsxwriter
- 修改导出代码的引擎参数:
df_user_export.to_excel('df_user_export.xlsx', sheet_name='df_user_export', engine='xlsxwriter')
执行后导出的Excel文件会完整保留条形格式。
方法2:用openpyxl手动添加条件格式(适用于必须使用openpyxl的场景)
如果一定要依赖openpyxl,需要先导出原始数据,再手动为单元格添加数据条条件格式:
from openpyxl import load_workbook from openpyxl.formatting.rule import DataBarRule # 导出原始数据(注意用Styler的.data属性获取未格式化的DataFrame) df_user_export.data.to_excel('df_user_export.xlsx', sheet_name='df_user_export', engine='openpyxl', index=False) # 加载工作簿并定位目标工作表 wb = load_workbook('df_user_export.xlsx') ws = wb['df_user_export'] # 创建数据条规则,颜色可根据需求调整 data_bar_rule = DataBarRule(start_type='min', end_type='max', color="FF638EC6") # 为目标单元格范围添加规则,示例为A2到D1000,需根据实际数据范围修改 ws.conditional_formatting.add('A2:D1000', data_bar_rule) # 保存修改后的工作簿 wb.save('df_user_export.xlsx')
内容的提问来源于stack exchange,提问作者BarbysCode
相关产品推荐
相关产品推荐

