Python で、Pandas の Dataframe を html 出力できると便利ですよね。

その方法を解説します。

準備

もちろんですが、pandas 必須です。

さらに追加パッケージとして、html出力には Jinja2 が必要ですので pip install しておいて下さい。

ヒートマップの作成には、matplotlib モジュールも必要です。


(venv)> pip install pandas
(venv)> pip install Jinja2
(venv)> pip install matplotlib



html出力

準備が整えば、方法はいたって簡単、to_html() するだけです。


import numpy as np 
import pandas as pd

# dataframe 作成
index= ['a', 'b', 'c', 'd', 'e']
cols = ['A', 'B', 'C', 'D']
df = pd.DataFrame(abs(np.random.randn(5, 4)), index=index, columns=cols)

# html 出力
html = df.to_html()

# ファイルに保存
with open("pandas_table.html", "w") as f:
    f.write(html)
A B C D
a 1.442957 0.951765 0.509854 0.524610
b 1.537143 0.964574 0.732922 2.635286
c 0.865918 0.930476 1.377448 0.672368
d 1.482504 0.978420 0.131061 0.671745
e 1.104164 0.569743 0.878412 0.408032



スタイリング

pandas.io.formats.style.Styler 関係を使うことで、様々なスタイリングができます。

https://pandas.pydata.org/docs/reference/api/pandas.io.formats.style.Styler.html


df.style.*** といった形で設定できます。

例えばヒートマップのテーブルにするなら、こんな感じです。

styler = df.style.background_gradient(cmap='Reds')
html = styler.to_html()

with open("pandas_table_hm.html", "w") as f:
    f.write(html)
  A B C D
a 1.442957 0.951765 0.509854 0.524610
b 1.537143 0.964574 0.732922 2.635286
c 0.865918 0.930476 1.377448 0.672368
d 1.482504 0.978420 0.131061 0.671745
e 1.104164 0.569743 0.878412 0.408032



他にも、テキストフォーマットとか、

styler = df.style.format('{:.2f}')

色々できるようです。

スポンサーリンク