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

使用pandas.style.apply高亮单元格并导出Excel触发KeyError问题

解决DataFrame样式高亮时的KeyError问题

错误原因

你遇到的KeyError: 'A'是因为使用subset=['B']时,style.apply会仅将B列的数据传入highlight函数,此时函数里尝试访问df['A']必然找不到对应的列——传入的DataFrame只有B列,自然不存在'A'列。

解决方案

要同时访问A、B两列进行判断,函数必须能拿到完整的DataFrame数据,不能通过subset限制传入的列。以下提供两种可行的实现方式:

方法一:基于整个DataFrame生成样式矩阵

import pandas as pd
import numpy as np
import os

data = [[10, 30, 30], [15, 20, 33], [14, 40, 36], [20, 20, 25]]
df = pd.DataFrame(data, columns=['A', 'B', 'C'])

def highlight(df, color):
    # 创建与原DataFrame形状一致的空样式矩阵
    style_matrix = pd.DataFrame('', index=df.index, columns=df.columns)
    # 筛选A、B列值相等的行,给对应B列单元格设置高亮样式
    match_mask = df['A'] == df['B']
    style_matrix.loc[match_mask, 'B'] = f"color: {color};"
    return style_matrix

# 应用样式并导出到Excel
df.style.apply(highlight, color='red', axis=None).to_excel(
    os.path.join(".\\data", 'highlighted_data.xlsx'), 
    index=False
)

方法二:逐行处理生成样式

import pandas as pd
import numpy as np
import os

data = [[10, 30, 30], [15, 20, 33], [14, 40, 36], [20, 20, 25]]
df = pd.DataFrame(data, columns=['A', 'B', 'C'])

def highlight(row, color):
    # 初始化每行的样式列表,默认无样式
    row_style = [''] * len(row)
    # 判断当前行A、B值是否相等,是则给B列(索引为1)设置样式
    if row['A'] == row['B']:
        row_style[1] = f"color: {color};"
    return row_style

# 按行应用样式并导出
df.style.apply(highlight, color='red', axis=1).to_excel(
    os.path.join(".\\data", 'highlighted_data.xlsx'), 
    index=False
)

说明

两种方法都能实现需求:当A、B列值相等时,高亮对应B列单元格,最终导出带样式的Excel文件。方法一更适合复杂的样式逻辑,方法二则更轻量化。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 16:22:38