You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas结合XlsxWriter:如何根据DataFrame内容修改单元格格式并添加批注

问题描述

现有一组经过多轮处理的DataFrame,存储了数据批注以及标注数据是否合格的标记字段,示例数据如下:

import pandas as pd
import numpy as np

df = pd.DataFrame({'Name': ['a','a','b','b'],
                   'Measurements': ['temp','pressure','temp','pressure'],
                   'Values': [1, 2, -1, np.nan],
                   'Comment': ['','','Is negative', 'Is NaN'],
                   'IsBad':[False, False, True, True] })
measurements = df.reset_index().pivot(index='Name',columns='Measurements',values='Values')
comments = df.reset_index().pivot(index='Name',columns='Measurements',values='Comment')
bad_cells = df.reset_index().pivot(index='Name',columns='Measurements',values='IsBad')

需要将上述数据导出为Excel文件,实现两个效果:

  • 根据IsBad字段的值对对应单元格设置高亮格式
  • 为异常单元格插入批注说明异常原因

之前尝试时遇到的问题:可以为每个透视后的DataFrame单独创建工作表导出,但无法引用其他工作表的内容为单元格添加批注;同时认为XlsxWriter不便于通过循环遍历df对象行的方式逐个定义每个单元格的属性。

实现方案

使用XlsxWriter作为导出引擎,配合pandas的ExcelWriter即可实现需求,无需拆分多个工作表,直接在同一个工作表中遍历单元格设置属性即可,示例代码如下:

# 定义导出路径
output_path = "测量数据校验结果.xlsx"

# 创建ExcelWriter对象,指定引擎为xlsxwriter
with pd.ExcelWriter(output_path, engine='xlsxwriter') as writer:
    # 先将测量值表写入工作表
    measurements.to_excel(writer, sheet_name='校验结果')
    
    # 获取workbook和worksheet对象
    workbook  = writer.book
    worksheet = writer.sheets['校验结果']
    
    # 定义异常单元格格式,可按需调整
    bad_format = workbook.add_format({'bg_color': '#FFC7CE', 'font_color': '#9C0006'})
    
    # 获取数据维度:行偏移为1(表头占1行),列偏移为1(索引列占1列)
    row_offset = 1
    col_offset = 1
    
    # 遍历所有数据行和列
    for i in range(len(measurements.index)):
        for j in range(len(measurements.columns)):
            # 检查当前单元格是否为异常
            if bad_cells.iloc[i, j]:
                # 计算Excel中对应的行号和列号
                excel_row = i + row_offset
                excel_col = j + col_offset
                # 设置单元格格式
                worksheet.write(excel_row, excel_col, measurements.iloc[i, j], bad_format)
                # 插入批注
                comment = comments.iloc[i, j]
                worksheet.write_comment(excel_row, excel_col, comment)

代码核心逻辑说明:

  • 先将主数据表写入Excel,获取工作表操作对象
  • 提前定义好异常单元格的样式
  • 按索引遍历每个数据单元格,匹配bad_cells和comments表中对应位置的内容,为异常单元格批量设置格式和添加批注
  • 所有操作都在同一个工作表完成,不需要额外创建其他工作表存储辅助数据

内容的提问来源于stack exchange,提问作者RedM

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 12:15:03