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}')
色々できるようです。