使用Pandas与XlsxWriter高亮Excel中值为DN的单元格问题
问题解决:高亮Excel中"DN"值的单元格
原代码的问题点
- 替换值不匹配需求:你需要将空值、"N/A"替换为"DN",但代码里用
fillna("NA")替换成了"NA",导致后续高亮逻辑匹配错误值。 - 样式未实际应用:生成了带高亮样式的
result对象,但最终写入Excel的是原始df,样式完全没生效。 - 样式逻辑错误:原函数设置的是字体颜色为黄色,而非需求的单元格背景高亮。
- 表头重复写入:
df.to_excel默认输出表头,之后又手动循环写入一次,属于重复操作。
修正后的完整代码
import pandas as pd import numpy as np # (此处省略CSV读取、列重命名/调整/删除等预处理代码) # 1. 按需求替换空值与"N/A"为"DN" df.replace('', np.nan, inplace=True) df.replace('N/A', np.nan, inplace=True) df = df.fillna("DN") df.index = np.arange(1, len(df) + 1) # 2. 定义背景高亮样式:匹配"DN"的单元格设为黄色背景 def highlight_dn(val): return 'background-color: yellow' if val == 'DN' else '' # 3. 将样式应用到DataFrame styled_df = df.style.applymap(highlight_dn) # 4. 写入Excel并配置表头格式 writer = pd.ExcelWriter(out_name, engine='xlsxwriter') styled_df.to_excel(writer, sheet_name='report', index=True, index_label="S_No", freeze_panes=(1,1)) workbook = writer.book worksheet = writer.sheets['report'] # 定义表头格式 header_format = workbook.add_format({ 'bold': True, 'fg_color': '#ffcccc', 'border': 1 }) # 写入自定义格式的表头(索引列+数据列) worksheet.write(0, 0, "S_No", header_format) for col_num, value in enumerate(df.columns.values): worksheet.write(0, col_num + 1, value, header_format) writer.close()
核心调整说明
- 把替换目标值从"NA"改为"DN",对齐需求
- 改用
styled_df.to_excel写入带样式的DataFrame,确保高亮逻辑生效 - 样式函数修改为设置
background-color(单元格背景),而非字体颜色 - 修正表头写入逻辑,覆盖默认表头的同时避免重复操作
内容的提问来源于stack exchange,提问作者joseph_k
相关产品推荐
相关产品推荐

