[解決済み] pandasのDataFrameテーブルをpngで保存する方法
質問
pandasのデータフレームで結果を構築しました。このデータフレームはテーブルとして機能します。MultiIndexedのカラムがあり、各行は名前を表しています、つまり
index=['name1','name2',...]
というように、DataFrameを作成するときに名前を指定します。このテーブルを表示し、png(または任意のグラフィックフォーマット)として保存したいと思います。今のところ、htmlに変換するのが一番近いのですが、pngが欲しいのです。似たような質問があるようで、例えば
Pandasのdataframe/seriesデータを図として保存する方法は?
しかし、マークされたソリューションは、データフレームを(テーブルではなく)ラインプロットに変換し、他のソリューションは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()関数に対する追加の引数を見つけることができます。 ここで . また この記事 にも感謝します。
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
indexes"上の列名を空文字列に変更します。
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')
et voila:
あまりきれいではありませんが、完全に機能的なマルチインデックス・テーブルです。
edit: 非推奨の警告
コメントで指摘されているように、インポートステートメントで
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'] = ''
関連
-
[解決済み] プログラムの実行やシステムコマンドの呼び出しはどのように行うのですか?
-
[解決済み] PandasでDataFrameの行を反復処理する方法
-
[解決済み] 列の値に基づいてDataFrameから行を選択するにはどうすればよいですか?
-
[解決済み] Pandasのカラム名のリネーム
-
[解決済み] Pandas DataFrameからカラムを削除する
-
[解決済み] Pandasのデータフレームで複数の列を選択する
-
[解決済み] Pandas DataFrameの行数を取得する方法は?
-
[解決済み】Pandas DataFrameのカラムヘッダからリストを取得する。
-
[解決済み】2つの辞書を1つの式でマージする(辞書の和をとる)には?)
-
[解決済み] 認証プラグイン 'caching_sha2_password' はサポートされていません。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] タプルのリストを複数のリストに変換するには?
-
[解決済み] Python 3でバイナリデータを標準出力に書き込むには?
-
[解決済み] Python 2.7サポート終了?
-
[解決済み] Pandasの'Freq'タグにはどのような値が有効ですか?
-
[解決済み] 古いバージョンのPythonにおける辞書のキーの並び順
-
[解決済み] pandasのタイムゾーンに対応したDateTimeIndexを、特定のタイムゾーンに対応したナイーブなタイムスタンプに変換する。
-
[解決済み] PySparkでデータフレームのカラムをString型からDouble型に変更する方法は?
-
[解決済み] Pythonの検索パスを他のソースに展開する
-
[解決済み] Pythonの文字列の前にあるbという接頭辞は何を意味するのですか?
-
[解決済み] Pythonでリストが空かどうかをチェックする方法は?重複