Python pandas基于附加列条件高亮单元格值并导出Excel方法
实现方案
整体流程分三步:先筛选目标列,再通过pandas Styler实现单元格高亮样式,最后导出为带格式的Excel文件,具体实现如下:
前置说明
- 原示例代码存在拼写错误:
pd.Dataframe正确写法为pd.DataFrame - 导出带格式的Excel需要依赖
openpyxl库,提前执行pip install openpyxl安装即可
完整代码
import pandas as pd # 构造原始DataFrame names = pd.DataFrame({ 'name': ['ben','adam','steve'], 'name1':['ben1','adam1','steve1'], 'name2':['ben2','adam2','steve2'], 'name3':['ben3','adam3','steve3'], 'name1_comp':[1,0,1], 'name2_comp':[0,1,1], 'name3_comp':[0,1,1] }) # 筛选需要保留的4列 df_res = names[['name', 'name1', 'name2', 'name3']].copy() # 定义高亮样式:匹配目标单元格设置浅黄色背景,颜色值可按需替换 def set_highlight(data): style = pd.DataFrame('', index=data.index, columns=data.columns) # 根据原表comp列的标记匹配高亮位置,和需要高亮的单元格完全对应 for row_idx in data.index: if names.loc[row_idx, 'name1_comp'] == 1: style.loc[row_idx, 'name1'] = 'background-color: #fff3b0' if names.loc[row_idx, 'name2_comp'] == 1: style.loc[row_idx, 'name2'] = 'background-color: #fff3b0' if names.loc[row_idx, 'name3_comp'] == 1: style.loc[row_idx, 'name3'] = 'background-color: #fff3b0' return style # 应用样式 styled_table = df_res.style.apply(set_highlight, axis=None) # 导出到Excel,index=False表示不导出行索引 styled_table.to_excel('result.xlsx', engine='openpyxl', index=False)
可选实现:直接按值匹配高亮
如果不想依赖原表的*_comp列判断,也可以直接把需要高亮的值存入集合,遍历单元格匹配即可,替换上面的set_highlight函数为下面的实现即可:
target_values = {'ben1', 'adam2', 'adam3', 'steve1', 'steve2', 'steve3'} def set_highlight(data): style = pd.DataFrame('', index=data.index, columns=data.columns) for col in data.columns: for row_idx in data.index: if data.loc[row_idx, col] in target_values: style.loc[row_idx, col] = 'background-color: #fff3b0' return style
内容的提问来源于stack exchange,提问作者aasseeedd
相关产品推荐
相关产品推荐

