将熊猫样式表导出到图像文件

Posted

技术标签:

【中文标题】将熊猫样式表导出到图像文件【英文标题】:Export pandas Styled table to image file 【发布时间】:2018-01-21 16:50:55 【问题描述】:

下面的代码在 jupyter notebook 中运行时会呈现一个我想导出到图像文件的颜色渐变格式的表格。

notebook 呈现的“styled_table”对象是 pandas.io.formats.style.Styler 类型。

我无法找到将 Styler 导出到图像的方法。

我希望有人可以分享一个导出的工作示例,或者给我一些指示。

import pandas as pd
import seaborn as sns

data = ('count', 's25'): 
       ('2017-08-11', 'Friday'): 88.0,
        ('2017-08-12', 'Saturday'): 90.0,
        ('2017-08-13', 'Sunday'): 93.0,
        ('count', 's67'): 
       ('2017-08-11', 'Friday'): 404.0,
        ('2017-08-12', 'Saturday'): 413.0,
        ('2017-08-13', 'Sunday'): 422.0,
        ('count', 's74'): 
       ('2017-08-11', 'Friday'): 203.0,
        ('2017-08-12', 'Saturday'): 227.0,
        ('2017-08-13', 'Sunday'): 265.0,
        ('count', 's79'): 
       ('2017-08-11', 'Friday'): 53.0,
        ('2017-08-12', 'Saturday'): 53.0,
        ('2017-08-13', 'Sunday'): 53.0

table = pd.DataFrame.from_dict(data)
table.sort_index(ascending=False, inplace=True)

cm = sns.light_palette("seagreen", as_cmap=True)
styled_table = table.style.background_gradient(cmap=cm)
styled_table

【问题讨论】:

你可能想检查this answer 检查***.com/questions/35634238/… 我的猜测是最后一条语句通过Styler.render返回html代码,所以你需要一个Python的方式来将HTML转换为图像,比如imgkit。 【参考方案1】:

如 cmets 中所述,您可以使用 render 属性来获取样式表的 HTML:

html = styled_table.render()

然后您可以使用将 html 转换为图像的包。例如,IMGKit: Python library of HTML to IMG wrapper。请记住,此解决方案需要安装 wkhtmltopdf,这是一个将 HTML 渲染为 PDF 和各种图像格式的命令行工具。这一切都在 IMGKit 页面中进行了描述。

有了这些,剩下的就很简单了:

import imgkit
imgkit.from_string(html, 'styled_table.png')

【讨论】:

我收到此错误If this file exists please check that this process can read it. Otherwise please install wkhtmltopdf - http://wkhtmltopdf.org 你知道我该如何解决吗? @EnzoDtz 似乎没有安装 wkhtmltopdf,或者无法通过系统路径访问它。您需要能够在命令行中输入例如wkhtmltopdf --help 并查看帮助菜单。 如果其他人不想处理安装,@Shovalt 的进程可以在您的浏览器中使用,并利用 MyBinder.org 系统从here 启动活动的 Jupyter 会话。 我可以找到该可执行文件的 pdf,但找不到图像 这就是答案。我的 jupyter 是从服务运行的,我使用了 os.system(echo $PATH) 并看到没有,尽管我自己使用 which(wkhtmltopdf) 看到了它。所以是的,一旦我将 environmentPath... yada yada 添加到我的 .service 文件中,jupyter 就正确地选择了路径。【参考方案2】:

您可以使用来自https://github.com/dexplo/dataframe_image 的dexplo 的dataframe_image。安装包后,它还允许您将样式器对象保存为来自README 的示例中的图像:

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

df = pd.DataFrame(np.random.rand(6,4))
df_styled = df.style.background_gradient()

dfi.export(df_styled, 'df_styled.png')

【讨论】:

之前的答案丢失了很多格式,这个解决方案可以完美地工作。旁注:我必须先升级 pip,然后才能使用 pip install --upgrade pip 安装此软件包。 截至 2021 年,这应该是最佳答案。相比imgkit的方案,它模仿了Jupyter的风格,不需要外部依赖。

以上是关于将熊猫样式表导出到图像文件的主要内容,如果未能解决你的问题,请参考以下文章

循环工作表,同时将范围导出为图像

如何在导出到 Excel 文件之前从 Python DataFrame 设置多行样式

将熊猫数据框保存到csv时如何保留numpy数组

将熊猫数据框保存到csv时如何保留numpy数组

在 QT 样式表中使用相对 url

arcgis图例颜色怎么批量导入