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

Databricks使用dataframe_image导出样式表报错及样式丢失问题求助

可行解决方案

方案1:安装Chromium继续使用chrome转换后端(推荐,样式100%保留)

首先在Databricks Notebook开头运行以下命令,给集群安装Chromium浏览器:

%sh
apt-get update
apt-get install -y chromium-browser

安装完成后,导出时明确指定Chromium可执行文件路径即可保留所有自定义样式,不需要修改原有样式逻辑:

import pandas as pd
import numpy as np 
import dataframe_image as dfi

np.random.seed(0)
df = pd.DataFrame(np.random.randn(10,4), columns=['A','B','C','D'])
def highlight_max(s, props=''):
    return np.where(s == np.nanmax(s.values), props, '')
styled_table = df.style.apply(highlight_max, props='color:red;', axis=1)\
         .set_properties(**{'background-color': '#ffffb3'})

dfi.export(
    styled_table, 
    'file1.png', 
    table_conversion='chrome',
    chrome_path='/usr/bin/chromium-browser'
)

如果集群每次重启都需要重新安装,可以将安装命令配置到集群的初始化脚本中,避免每次运行Notebook重复执行安装步骤。

方案2:无法安装浏览器时,用matplotlib原生表格手动实现样式

dataframe_image的matplotlib转换后端对pandas Styler的自定义CSS支持度极低,所以会丢失样式。可以直接使用matplotlib原生的表格组件绘制,不需要依赖任何外部浏览器组件:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

np.random.seed(0)
df = pd.DataFrame(np.random.randn(10,4), columns=['A','B','C','D'])

fig, ax = plt.subplots(figsize=(8, 4))
ax.axis('tight')
ax.axis('off')

# 绘制基础表格
table = ax.table(cellText=df.values, colLabels=df.columns, loc='center', cellLoc='center')

# 全局设置背景色
for cell in table.get_celld().values():
    cell.set_facecolor('#ffffb3')

# 标记每行最大值为红色
for i in range(len(df)):
    row_vals = df.iloc[i].values
    max_col_idx = np.nanargmax(row_vals)
    # 行索引从1开始跳过表头行
    table[(i+1, max_col_idx)].set_text_props(color='red')

plt.savefig('file1.png', bbox_inches='tight', dpi=300)

该方案运行速度更快,样式可完全自定义,适合无法安装额外依赖的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 23:06:01