如何基于颜色矩阵逐单元格设置Pandas DataFrame样式并导出Excel
按自定义颜色矩阵为Pandas DataFrame单元格设置样式并导出Excel
要实现根据同尺寸颜色矩阵为DataFrame单元格设置背景色并导出带格式的Excel,核心思路是通过单元格的行列索引匹配颜色矩阵中的对应值,以下是两种可行方案:
方案一:使用Styler.apply遍历匹配
这种方法直接操作Styler对象,通过行列索引精准匹配颜色矩阵的颜色值:
import pandas as pd # 示例:创建2×2的DataFrame和对应颜色矩阵 df = pd.DataFrame([[10, 20], [30, 40]], columns=['A', 'B'], index=['X', 'Y']) color_matrix = pd.DataFrame( [['#FFCCCC', '#CCFFCC'], ['#CCCCFF', '#FFFFCC']], columns=df.columns, index=df.index ) def apply_custom_colors(styler): # 遍历每个单元格的行列索引 for row_idx in styler.data.index: for col_name in styler.data.columns: # 从颜色矩阵中取出对应颜色 cell_color = color_matrix.loc[row_idx, col_name] # 为当前单元格设置背景色 styler.set_properties(subset=(row_idx, col_name), **{'background-color': cell_color}) return styler # 应用样式并导出Excel styled_df = df.style.pipe(apply_custom_colors) styled_df.to_excel('colored_data.xlsx', engine='openpyxl', index=True)
方案二:applymap结合行列参数传递
如果偏好使用applymap,可以通过kwargs传递行列信息,结合多层索引的颜色序列实现匹配:
import pandas as pd # 示例数据(同上) df = pd.DataFrame([[10, 20], [30, 40]], columns=['A', 'B'], index=['X', 'Y']) color_matrix = pd.DataFrame( [['#FFCCCC', '#CCFFCC'], ['#CCCCFF', '#FFFFCC']], columns=df.columns, index=df.index ) # 将颜色矩阵转为多层索引的Series,方便按行列取值 color_series = color_matrix.stack() def get_cell_color(_, row, column): # 根据当前单元格的行列索引获取颜色 return f'background-color: {color_series.loc[row, column]}' # 应用样式时传递行列参数 styled_df = df.style.applymap(get_cell_color, row=df.index, column=df.columns) styled_df.to_excel('colored_data2.xlsx', engine='openpyxl', index=True)
关键注意事项
- 导出Excel必须指定
engine='openpyxl',Pandas的样式导出依赖该引擎支持格式保存; - 颜色矩阵的索引和列名必须与目标DataFrame完全一致,否则会出现匹配失败;
- 如果颜色矩阵是NumPy数组,需先转为Pandas DataFrame并对齐索引和列名:
color_matrix = pd.DataFrame(numpy_array, index=df.index, columns=df.columns)。
内容的提问来源于stack exchange,提问作者Chenyang
相关产品推荐
相关产品推荐

