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

