如何在Pandas中按条件设置单元格及Avg整行背景色并导出Excel?
解决DataFrame单元格着色错误及Avg整行着色导出Excel
一、修复单元格着色的UnboundLocalError
原代码存在两个核心问题:
- 逻辑运算符误用:Python中逻辑与需用
and,而非位运算符& - 边界值未覆盖:当值等于50或80时,没有对应的分支逻辑,导致
color变量未定义,触发错误
修改后的单元格着色函数:
def color_cell(val): if val > 80: bg_color = 'red' elif 50 < val < 80: bg_color = 'yellow' elif val <= 50: bg_color = 'green' return f'background-color: {bg_color}'
二、实现Avg整行背景色设置
编写行级着色函数,判断目标行后根据Percent_Utilized值设置整行样式:
def color_avg_row(row): if row['Server'] == 'Avg': val = row['Percent_Utilized'] if val > 80: bg_color = 'red' elif 50 < val < 80: bg_color = 'yellow' else: bg_color = 'green' return [f'background-color: {bg_color}'] * len(row) return [''] * len(row)
三、组合样式并导出Excel
将两个样式逻辑结合,导出到Excel文件:
# 依次应用单元格着色和行着色 styled_df = df.style.applymap(color_cell, subset=["Percent_Utilized"])\ .apply(color_avg_row, axis=1) # 导出Excel,不含索引列 styled_df.to_excel('server_utilization_report.xlsx', index=False)
注意事项
- 若
Avg行的判断条件不是Server == 'Avg',可根据实际数据调整(比如用pd.isna(row['Env.'])判断空值列) - 原DataFrame中
Avg行的空值单元格也会被设置对应背景色,符合需求
内容的提问来源于stack exchange,提问作者user1471980
相关产品推荐
相关产品推荐

