使用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
相关产品推荐
相关产品推荐

