Python中如何为DataFrame对应Excel单元格按特定值设置背景色?
Python中如何为DataFrame对应Excel单元格按特定值设置背景色?
嘿,我发现你的问题出在样式应用后没有正确保存上!你调用了df3.style.applymap(cond_formatting),但这个方法返回的是一个带有样式的Styler对象,并没有修改原来的df3。你之后直接用原DataFrame的to_excel方法保存,自然不会带上样式啦。
解决方法
你需要把样式应用后的Styler对象保存下来,然后用它的to_excel方法导出Excel,而不是原DataFrame的方法。具体修改如下:
- 先把样式应用结果赋值给一个变量:
# 应用样式并保存Styler对象 styled_df = df3.style.applymap(cond_formatting)
- 用这个
styled_df来导出Excel,同时保留你的freeze_panes设置:
# 保存带样式的Excel文件 styled_df.to_excel(file_name, freeze_panes=(1, 0))
修改后的完整代码片段
我把你的代码调整后,关键部分是这样的:
def cond_formatting(x): if x == 'OK': return 'background-color: lightgreen' elif x == 'NO': return 'background-color: red' else: return None # 你的DataFrame处理逻辑保持不变 print(pd.merge(df, df2, left_on='uniquefield', right_on='uniquefield2', how='left').drop('uniquefield2', axis=1)) df3 = df.merge(df2, left_on='uniquefield', right_on='uniquefield2', how='left').drop(['uniquefield2', 'tournament2', 'home2', 'away2', 'result2'], axis=1) df3 = df3[["home","away","scorehome","scoreaway","best_bets","oddtwo","oddthree","htresult","shresult","result","over05ht","over15ht","over05sh","over15sh","over05","over15","over25","over35","over45","goal","esito","tournament","uniquefield"]] df3 = df3.sort_values('best_bets') # 重点:保存Styler对象 styled_df = df3.style.applymap(cond_formatting) # determining the name of the file file_name = camp + '_Last_20' + '.xlsx' # 用Styler对象导出Excel,而不是原df3 styled_df.to_excel(file_name, freeze_panes=(1, 0)) print('Tournament is written to Excel File successfully.')
额外注意点
- 如果你不需要导出DataFrame的索引,可以在
to_excel里加上index=False参数,比如styled_df.to_excel(file_name, freeze_panes=(1, 0), index=False) - 确保你的pandas版本是较新的(比如1.3.0及以上),避免
Styler.to_excel方法出现兼容性问题
这样修改后,Excel里的单元格就会根据值显示对应的背景色啦!
备注:内容来源于stack exchange,提问作者Marci
相关产品推荐
相关产品推荐

