我构建了一个结果熊猫数据框。该数据帧充当表格。有MultiIndexed列,每一行代表一个名称,即index=['name1','name2',...]
创建DataFrame时的名称。我想显示此表并将其另存为png(或其他任何图形格式)。目前,我能得到的最接近的是将其转换为html,但我想要一个png。似乎有人问过类似的问题,例如如何将Pandas数据框/系列数据保存为图形?
但是,标记的解决方案将数据帧转换为折线图(而不是表格),而另一种解决方案则依赖于PySide,我只是想将其保留下来,因为我无法在Linux上pip安装它。我希望此代码易于移植。我真的期望使用python轻松创建png表。感谢所有帮助。
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中删除轴的信息。
这是一种使用上述方法进行绘图时模拟多索引的方式(无疑是很hacky)。如果您有一个称为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')
然后去:
您不太漂亮但功能齐全的多索引表。
正如评论中指出的,import语句用于table
:
from pandas.tools.plotting import table
现在已在较新版本的熊猫中弃用,而支持:
from pandas.plotting import table
该ix
索引现在已经完全过时,所以我们应该使用loc
索引来代替。更换:
df.ix[df.duplicated('first') , 'first'] = ''
与
df.loc[df.duplicated('first') , 'first'] = ''
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句