如何将带单元格背景色的样式化DataFrame导出至Excel并保留样式
如何将带单元格背景色的样式化DataFrame导出至Excel并保留样式
嗨,我明白你的困扰——你已经用pandas的style功能给DataFrame里符合条件的单元格加上了红色背景,但导出到Excel时样式却消失了。问题其实出在最后一步的导出方法上!
你现在调用的是df.to_excel("test.xlsx"),这个方法只会导出原始的DataFrame数据,完全不会带上你通过df.style.apply(...)设置的样式。要保留背景色,你需要调用样式化后的对象的to_excel()方法,而不是原始DataFrame的。
另外,为了让样式能正确写入Excel,我们需要指定导出引擎为openpyxl(它支持xlsx格式的样式保存,是pandas处理带样式Excel的常用引擎)。如果还没安装这个库,先通过pip install openpyxl安装一下。
结合你的代码,修改后的完整版本如下:
import pandas as pd df = pd.DataFrame([ {'color_A_in_red': True, 'A': 1}, {'color_A_in_red': False, 'A': 2}, {'color_A_in_red': True, 'A': 2}, ]) def highlight(x): c = "background-color:red" # 筛选需要标红的行条件 m = x["color_A_in_red"] # 创建空的样式模板DataFrame df1 = pd.DataFrame('', index=x.index, columns=x.columns) # 给符合条件的A列单元格设置红色背景 df1.loc[m, 'A'] = c return df1 # 生成样式化的Styler对象(这一步你之前没保存下来) styled_df = df.style.apply(highlight, axis=None) # 用Styler对象导出Excel,指定openpyxl引擎 styled_df.to_excel("test.xlsx", engine="openpyxl")
这样导出的test.xlsx里,符合color_A_in_red=True的A列单元格就会保留红色背景啦!核心就是记住:样式是存在Styler对象里的,一定要用这个对象来执行导出操作。
备注:内容来源于stack exchange,提问作者guybrush_threepwood
相关产品推荐
相关产品推荐

