将pandas的样式表导出为图片文件

34
当在jupyter笔记本中运行以下代码时,将呈现出一张带有色彩渐变格式的表格,我希望能将其导出为图像文件。
所得到的“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

在此输入图像描述


1
你可能想查看这个答案。 - MaxU - stand with Ukraine
请检查以下链接:https://dev59.com/xFsV5IYBdhLWcg3w6yYh - TYZ
2
我的猜测是最后一条语句通过Styler.render返回HTML代码,因此您需要一种将HTML转换为图像的Python方法,例如imgkit - ojdo
2个回答

25
如评论中所提到的,您可以使用to_html()方法来获取带有样式的表格的HTML(在旧版本中是render()):
html = styled_table.to_html()

你可以使用一个将HTML转换为图像的包。例如,IMGKit: Python库的HTML到IMG包装器。请注意,这个解决方案需要安装wkhtmltopdf,一个将HTML渲染为PDF和各种图像格式的命令行工具。所有的细节都在IMGKit页面中有详细描述。
一旦你有了这个,剩下的就很简单了:
import imgkit
imgkit.from_string(html, 'styled_table.png')

我遇到了这个错误 如果该文件存在,请检查该进程是否可以读取它。否则,请安装wkhtmltopdf - http://wkhtmltopdf.org,你知道如何解决吗? - Enzo Dtz
1
@EnzoDtz 看起来要么是wkhtmltopdf没有安装,要么是它无法通过系统路径访问。你需要在命令行中输入例如 wkhtmltopdf --help 并查看帮助菜单。 - Shovalt
1
如果其他人不想处理安装问题,@Shovalt的过程可以在浏览器中使用,从这里启动活动的Jupyter会话,并利用MyBinder.org系统。 - Wayne
1
那就是答案。我的jupyter是从一个服务中运行的,我使用了os.system(echo $PATH)并发现没有路径,尽管我自己用which(wkhtmltopdf)看到了它。所以,是的,一旦我在我的.service文件中添加了environmentPath...等等,jupyter就正确地获取了路径。 - thistleknot
1
自pandas 1.4.0起,Styler.render已被弃用,请改用Styler.to_html(从pandas 1.3.0开始)代替。 - undefined
显示剩余3条评论

21
您可以使用dexplo的dataframe_image,地址为https://github.com/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 - Julien Massardier
截至2021年,这应该是最佳答案。与“imgkit”解决方案相比,它模仿了Jupyter的样式,并且不需要外部依赖项。 - Thrastylon
1
我的样式化DataFrame无法渲染LaTeX。 - James Hirschorn
正如@James Hirschorn所提到的,dataframe_image似乎只设计用于与Styler的HTML表示一起工作(这对于OP来说很重要,因为Jupyter使用HTML),而不是当前可用的任何其他输出方法(例如Excel、LaTeX)。将这些内容转换为图像的方法与将HTML转换为图像的方法非常不同。对于pdfLaTeX,一种选择是使用pdf2image.convert_from_path(...)来获取一系列pillow图像,然后使用image.save(filepath, 'PNG')来保存每个图像。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接