如何将 pandas DataFrame 表保存为 png

2023-12-19

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

然而,标记的解决方案将数据帧转换为线图(而不是表格),而另一个解决方案依赖于 PySide,我想远离它,因为我无法在 Linux 上安装它。我希望这段代码易于移植。我真的很期待用 python 创建 png 表格很容易。感谢所有帮助。


Pandas 允许您使用 matplotlib 绘制表格(详细信息here http://pandas.pydata.org/pandas-docs/stable/visualization.html#plotting-tables)。 通常这会将表格直接绘制到绘图上(带有轴和所有内容),这不是您想要的。但是,可以先删除这些:

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() 函数的其他参数here http://matplotlib.org/api/axes_api.html#matplotlib.axes.Axes.table。 也感谢这个帖子 http://matplotlib.1069221.n5.nabble.com/Draw-only-table-without-XY-Axis-td19546.html有关如何删除 matplotlib 中的轴的信息。


EDIT:

这是使用上述方法进行绘图时模拟多索引的一种(诚然相当老套的)方法。如果您有一个名为 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

The ix索引器现已完全已弃用 http://pandas-docs.github.io/pandas-docs-travis/user_guide/indexing.html#ix-indexer-is-deprecated所以我们应该使用loc相反,索引器。代替:

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

with

df.loc[df.duplicated('first') , 'first'] = ''
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将 pandas DataFrame 表保存为 png 的相关文章

随机推荐

  • Python 的 Fasttext - 模块“fasttext”没有属性“load_model”

    请原谅我的新手 但 fasttext 在 python 上不适合我 我正在使用运行 python 3 6 的 anaconda 我的代码如下 只是一个例子 import fasttext model fasttext load model
  • Java 1.6 Windows-1252 编码因 3 个字符而失败

    编辑 我确信这个问题有点荒谬 感谢那些回复的人 我可能会发布一个更具体的后续问题 今天 我正在解决一些编码问题 并编写了这个单元测试来隔离基本重现案例 int badCount 0 for int i 1 i lt 255 i String
  • MySQLWorkbench正向工程错误

    我正在 MySql Workbench 8 0 中处理模型 当我单击正向工程并尝试生成我的模型的脚本时 我得到 Executing SQL script in server ERROR Error 1064 You have an erro
  • 根据列名称列表对列进行子集化,并将该列放在其前面

    我有一个更大的数据集 遵循相同的顺序 一个唯一的日期列 数据 唯一的日期列 日期等 我不仅尝试按名称对数据列进行子集化 还尝试对唯一的日期列进行子集化 下面的代码根据名称列表选择列 这是我想要的一部分 但是关于如何在子集列之前获取该列有什么
  • 存储使用 Atlassian SourceTree 所做的更改

    我的项目中更改了很多文件 我想隐藏 2 个文件 但我有点害怕犯错误 因为我从未这样做过 If i would stash now will it only stash the 2 staged files 如果我不标记 保留分阶段更改 它会
  • 如何在 MongoDB 上按字符串长度对结果进行排序

    我可以在mysql上轻松完成 select from TABLE order by length FIELD asc 我怎样才能在 MongoDB 上做到这一点 MongoDB 3 4 引入了 strLenCP https docs mon
  • 配置“--prefix”选项进行交叉编译

    我应该通过哪条路径 prefix进行交叉编译时的选项 我应该指定构建机器上的路径还是目标平台上的路径 假设我将代码构建到 home me arm build target fs usr 之后我将文件复制到我的目标平台 它们将位于 usr 我
  • 通过 AJAX 的跨源资源共享 (CORS)

    我知道关于这个主题有很多问题 一段时间以来我一直在努力解决这个问题 请让我了解一下这个具体案例 My Goal 我正在尝试从以下 URL 获取 JSON 数据 https www icims com bellworks https www
  • 纯 JavaScript 中的 jQuery live() ?

    我正在尝试用纯 JavaScript 实现 jQuery live 函数的功能 这里有人可以帮忙吗 Thanks 这是一个启动的小例子 document onclick function evt evt evt window event v
  • JS 代理模式

    我使用此代码来覆盖 window alert 函数 该函数用 r n 替换中断 它在 Firefox 中运行良好 但在 IE 中当然不行 我收到错误 不支持属性或方法 function var proxied window alert wi
  • CMake检查主项目是否被调用

    我有这样的项目目录设计 Main CMakeLists txt subproject1 CMakeLists txt subproject2 CMakeLists txt 如果 subproject1 cmake 被主项目调用 或者作为独立
  • 根据字段值增量并创建记录

    访问2003 最终 我需要创建一个用于打印标签 样品 ID 罐 x of x 的报告 我的桌子上有样品 ID 和罐子数量 是否可以创建一个查询 为我提供 3 个字段 样品 ID 罐号 罐数 其中罐号根据罐数以增量方式创建记录 Query S
  • Java - 编译错误方法无法调用

    我必须使用测试工具编译我的代码 但是 当该测试工具调用我的方法时 我收到此错误 Course 类中的 getCourseDetails 方法不能应用于给定类型 必需 java lang String int java lang String
  • Typescript 将元组的类型元组转换为元组(展平元组)

    我有这个 Type T Params lt Tuple1 Tuple2 gt eg string number 制作方法 压扁 Type Flatten
  • 如何锁定 cytoscape.js 节点在其父节点内的位置

    我想锁定节点相对于其父复合节点的位置 这样 如果我抓取并拖动父节点 子节点会随之移动 但子节点不能单独抓取 如果我将子项设置为不可抓取和 或锁定 那么它不会与其父项一起移动 但如果我不这样做 它可以被单独拖动 这是我不想要的 这可以做到吗
  • 如何将参数(名称)传递给函数工厂?

    我需要构建许多带有许多不同参数的函数 尽管它们共享许多代码和结构 为了避免重复 我想我应该聪明地为自己构建一个函数工厂 又名闭包 我不知道如何在函数工厂内传递函数参数 我的用例是一堆 S3 构造函数 所有这些函数都共享相同的验证机制 所以我
  • 如何将测试用例从 Excel 导入到 VSTS/Azure DevOps

    我有很多测试用例当前位于 Excel 中 我需要将它们迁移到 VSTS Azure DevOps 有人可以推荐我一个好方法吗 这是一种手动方式 但也许对您有用 在 IE 或 Edge 上 您可以在测试计划中尝试网格视图 然后复制 粘贴测试用
  • Java LibGDX 如何解析 JSON?

    我有一个 json 文件 内容如下 players name hp 100 name hp 120 weapons name Desert Eagle price 100 name AK 47 price 150 如何将其解析为武器数组 我
  • 获取和转换与条件格式

    我正在尝试使用conditional formatting的输出Get Transform询问 Office 365 Excel 2016 32 位 Windows 10 专业版 64 位 但是 当刷新查询时 条件格式不仅仅是扩展 收缩以影
  • 如何将 pandas DataFrame 表保存为 png

    我构建了一个结果的 pandas 数据框 该数据框充当表格 有 MultiIndexed 列 每行代表一个名称 即index name1 name2 创建 DataFrame 时 我想显示这个表格并将其保存为 png 或任何图形格式 目前