如何将 pandas DataFrame 表保存为 png

新手上路,请多包涵

我构建了一个熊猫结果数据框。该数据框充当表格。有 MultiIndexed 列,每行代表一个名称,即 index=['name1','name2',...] 创建 DataFrame 时。我想显示此表并将其另存为 png(或任何图形格式)。目前,我能得到的最接近的是将它转换为 html,但我想要一个 png。看起来有人问过类似的问题,例如 How to save the Pandas dataframe/series data as a figure?

但是,标记的解决方案将数据框转换为线图(不是表格),而另一个解决方案依赖于 PySide,我想远离它只是因为我不能在 linux 上 pip 安装它。我希望此代码易于移植。我真的很期待使用 python 轻松创建 png 表。感谢所有帮助。

原文由 Shatnerz 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 696
2 个回答

Pandas 允许您使用 matplotlib 绘制表格(详情请参见 此处)。通常这会将表格直接绘制到一个图(带有轴和所有内容)上,这不是您想要的。但是,可以先删除这些:

 import matplotlib.pyplot as plt
import pandas as pd
from pandas.table.plotting import table # EDIT: see deprecation warnings below

ax = plt.subplot(111, frame_on=False) # no visible frame
ax.xaxis.set_visible(False)  # hide the x axis
ax.yaxis.set_visible(False)  # hide the y axis

table(ax, df)  # where df is your data frame

plt.savefig('mytable.png')

输出可能不是最漂亮的,但您可以 在此处 找到 table() 函数的其他参数。也感谢 这篇文章 提供了有关如何在 matplotlib 中删除轴的信息。


编辑:

这是使用上述方法进行绘图时模拟多指标的一种(诚然非常老套)方法。如果你有一个名为 df 的多索引数据框,它看起来像:

 first  second
bar    one       1.991802
       two       0.403415
baz    one      -1.024986
       two      -0.522366
foo    one       0.350297
       two      -0.444106
qux    one      -0.472536
       two       0.999393
dtype: float64

首先重置索引,使它们成为普通列

df = df.reset_index()
df
    first second       0
0   bar    one  1.991802
1   bar    two  0.403415
2   baz    one -1.024986
3   baz    two -0.522366
4   foo    one  0.350297
5   foo    two -0.444106
6   qux    one -0.472536
7   qux    two  0.999393

通过将它们设置为空字符串,从高阶多索引列中删除所有重复项(在我的示例中,我在“first”中只有重复索引):

 df.ix[df.duplicated('first') , 'first'] = '' # see deprecation warnings below
df
  first second         0
0   bar    one  1.991802
1          two  0.403415
2   baz    one -1.024986
3          two -0.522366
4   foo    one  0.350297
5          two -0.444106
6   qux    one -0.472536
7          two  0.999393

将“索引”上的列名更改为空字符串

new_cols = df.columns.values
new_cols[:2] = '',''  # since my index columns are the two left-most on the table
df.columns = new_cols

现在调用表函数,但将表中的所有行标签设置为空字符串(这确保不显示绘图的实际索引):

 table(ax, df, rowLabels=['']*df.shape[0], loc='center')

等瞧:

在此处输入图像描述

您的不太漂亮但功能齐全的多索引表。

编辑:弃用警告

正如评论中所指出的, table 的导入语句:

 from pandas.tools.plotting import table

现在在较新版本的 pandas 中已弃用,取而代之的是:

 from pandas.plotting import table

编辑:弃用警告 2

ix 索引器现已完全 弃用,因此我们应该改用 loc 索引器。代替:

 df.ix[df.duplicated('first') , 'first'] = ''

df.loc[df.duplicated('first') , 'first'] = ''

原文由 bunji 发布,翻译遵循 CC BY-SA 4.0 许可协议

其实有一个叫dataframe_image的python库就可以做一个

pip install dataframe_image

做进口

import pandas as pd
import numpy as np
import dataframe_image as dfi
df = pd.DataFrame(np.random.randn(6, 6), columns=list('ABCDEF'))

并根据需要设置表格样式:

 df_styled = df.style.background_gradient() #adding a gradient based on values in cell

最后:

 dfi.export(df_styled,"mytable.png")

原文由 Akshay Palakkode 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题