Webアプリケーションのレポート作成や、メール本文へのデータ埋め込みにおいて、PandasのDataFrameをHTMLの <table> タグ形式に変換する機能は非常に便利です。to_html メソッドを使用することで、データを手動でHTMLタグで囲むことなく、一瞬で表形式のマークアップを生成できます。
本記事では、to_html メソッドの主要なパラメータと、ファイルへの書き出しおよび文字列としての取得方法について解説します。
目次
主要パラメータ一覧
出力されるHTMLテーブルの構造や属性を制御するために、以下のパラメータが頻繁に使用されます。
| パラメータ | 意味・役割 | 指定例 |
| index | 行ラベル(インデックス)を出力するかどうかを指定します。デフォルトは True ですが、不要な場合は False にします。 | True, False |
| columns | 出力対象とする列を指定します。特定の列だけを抽出したい場合にリストで渡します。 | ["Model", "Price"] |
| border | <table> タグの border 属性(枠線の太さ)を指定します。※HTML5ではCSSでの制御が推奨されますが、簡易的な確認に便利です。 | 1, 2 |
| justify | 列見出し(ヘッダー)の配置を指定します。 | "left", "right", "center" |
| table_id | <table> タグに id 属性を付与します。CSSやJavaScriptで操作する際に役立ちます。 | "product_table" |
実装サンプルコード
以下に、スマートフォン製品のスペック比較データを例として、HTMLファイルへの出力とHTML文字列の取得を行うコードを示します。
import pandas as pd
def export_dataframe_to_html():
"""
Pandas DataFrameをHTML形式(ファイルおよび文字列)で出力する関数
"""
# 1. サンプルデータの作成
# スマートフォンのスペックリスト
smartphone_data = {
"Model": ["Phone X", "Phone Y", "Phone Z"],
"Price": [85000, 62000, 98000],
"Battery_mAh": [4500, 4000, 5000],
"Rating": [4.5, 4.2, 4.8]
}
df = pd.DataFrame(smartphone_data)
print("--- 元のDataFrame ---")
print(df)
print("\n")
# 2. 基本的なHTMLファイルへの出力
# index=False にすることで、行番号(0, 1, 2...)を除外します
basic_filename = "basic_table.html"
df.to_html(basic_filename, index=False)
print(f"基本的なHTMLファイルを出力しました: {basic_filename}")
# 3. パラメータを指定した詳細なHTML出力
# 特定の列のみ抽出し、テーブルのIDや枠線、文字配置を指定します
advanced_filename = "advanced_table.html"
df.to_html(
advanced_filename,
columns=["Model", "Price", "Rating"], # Battery_mAhを除外
index=False, # インデックスなし
table_id="price_list",# <table id="price_list">
border=2, # <table border="2">
justify="center" # ヘッダーを中央寄せ
)
print(f"詳細設定付きHTMLファイルを出力しました: {advanced_filename}")
# 4. HTML文字列として取得
# 第1引数(ファイルパス)を省略、または None を指定すると文字列が返ります
# Webフレームワーク(Flask/Django)でテンプレートに渡す際などに使用します
html_string = df.to_html(index=False, border=1)
print("\n--- 生成されたHTML文字列(抜粋) ---")
print(html_string[:150] + "...") # 長いため冒頭のみ表示
if __name__ == "__main__":
export_dataframe_to_html()
実行結果(コンソール出力)
--- 元のDataFrame ---
Model Price Battery_mAh Rating
0 Phone X 85000 4500 4.5
1 Phone Y 62000 4000 4.2
2 Phone Z 98000 5000 4.8
基本的なHTMLファイルを出力しました: basic_table.html
詳細設定付きHTMLファイルを出力しました: advanced_table.html
--- 生成されたHTML文字列(抜粋) ---
<table border="1" class="dataframe">
<thead>
<tr style="text-align: right;">
<th>Model</th>
<th>Price</th>
<th>Battery_mAh<...
出力されるHTMLのイメージ
生成された advanced_table.html の中身(ソースコード)は以下のようになります。<table> タグのみが出力され、<html> や <body> タグは含まれない点に注意が必要です。
<table border="2" class="dataframe" id="price_list">
<thead>
<tr style="text-align: center;">
<th>Model</th>
<th>Price</th>
<th>Rating</th>
</tr>
</thead>
<tbody>
<tr>
<td>Phone X</td>
<td>85000</td>
<td>4.5</td>
</tr>
</tbody>
</table>
解説
- HTMLの構造:
to_htmlはあくまでテーブル要素(<table>...</table>)のみを生成します。完全なWebページとして表示するためには、別途HTMLのヘッダーなどを記述したファイルの中に、この出力を埋め込む必要があります。 - スタイル調整:
border属性などはHTML5では非推奨となる傾向があります。見た目を整える場合は、classesパラメータを使用してCSSクラスを指定し(例:classes="table table-striped")、BootstrapなどのCSSフレームワーク側でデザインを適用する方法が一般的です。
