Pandas Styleでテーブルの見栄えをレベルアップ!template_stringでできる高度なカスタマイズ


pandas.io.formats.style.Styler.template_string は、pandas ライブラリの Style 機能を使って、DataFrame を HTML 形式で表示する際に、より詳細なカスタマイズを行うための機能です。デフォルトのテンプレートに加えて、独自の HTML テンプレートを指定することで、列の幅、フォントスタイル、背景色などを個別に設定することができます。

使い方

  1. Styler オブジェクトを作成します。
  2. template_string プロパティに、HTML テンプレート文字列を代入します。
  3. to_html() メソッドを呼び出して、HTML 形式の文字列を取得します。

import pandas as pd

# データフレームを作成
data = {'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]}
df = pd.DataFrame(data)

# Styler オブジェクトを作成
styler = df.style

# HTML テンプレート文字列を作成
template_string = """
<style>
    table {
        border-collapse: collapse;
    }
    th, td {
        border: 1px solid #ddd;
        padding: 8px;
    }
    th {
        text-align: left;
        background-color: #f0f0f0;
    }
    td {
        text-align: right;
    }
</style>

<table>
    <thead>
        <tr>
            <th>列名</th>
            <th>値</th>
        </tr>
    </thead>
    <tbody>
        {rows}
    </tbody>
</table>
"""

# テンプレート文字列にデータ行を埋め込む
rows = ""
for i in range(len(df)):
    row = "<tr>"
    for col in df.columns:
        row += f"<td>{df.loc[i, col]}</td>"
    row += "</tr>"
    rows += row

# HTML テンプレート文字列を Styler オブジェクトに設定
styler.template_string = template_string.format(rows=rows)

# HTML 形式の文字列を取得
html = styler.to_html()

# HTML 形式の文字列を表示
print(html)

この例では、以下のカスタマイズを行っています。

  • データ行のセルを右揃えに設定
  • 列見出しの背景色を灰色に設定
  • 列見出しとデータ行のセルに境界線と余白を追加
  • 表全体に境界線を追加

テンプレート文字列

template_string プロパティに指定する HTML テンプレート文字列は、以下の要素で構成されています。

  • <td>: データ行セルを囲む要素
  • <th>: 列見出しセルを囲む要素
  • <tr>: 行を囲む要素
  • <thead>: 列見出し行を囲む要素
  • <table>: 表全体を囲む要素

これらの要素内に、CSS スタイルを定義したり、データ行のセルに値を埋め込んだりすることができます。

詳細

pandas.io.formats.style.Styler.template_string は、高度な HTML カスタマイズを可能にする強力な機能です。詳細については、以下のドキュメントを参照してください。

  • pandasStyle 機能は、DataFrame をより見やすく、理解しやすい形式で表示するのに役立ちます。
  • pandas.io.formats.style.Styler には、template_string 以外にも、列幅の調整、フォントスタイルの設定、背景色の設定など、様々なカスタマイズ機能が用意されています。


例 1: 列ごとに異なるスタイルを適用

この例では、各列に個別にスタイルを適用する方法を示します。

import pandas as pd

# データフレームを作成
data = {'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]}
df = pd.DataFrame(data)

# Styler オブジェクトを作成
styler = df.style

# HTML テンプレート文字列を作成
template_string = """
<style>
    table {
        border-collapse: collapse;
    }
    th, td {
        border: 1px solid #ddd;
        padding: 8px;
    }
    th {
        text-align: left;
        background-color: #f0f0f0;
    }
    .col-A {
        text-align: center;
        font-weight: bold;
        background-color: #ffe0e0;
    }
    .col-B {
        text-align: right;
        font-style: italic;
        background-color: #e0f0ff;
    }
    .col-C {
        text-align: left;
        color: #0080ff;
    }
</style>

<table>
    <thead>
        <tr>
            <th>列名</th>
            <th>値</th>
        </tr>
    </thead>
    <tbody>
        {rows}
    </tbody>
</table>
"""

# テンプレート文字列にデータ行を埋め込む
rows = ""
for i in range(len(df)):
    row = "<tr>"
    for col in df.columns:
        cls = f"col-{col}"
        row += f"<td class='{cls}'>{df.loc[i, col]}</td>"
    row += "</tr>"
    rows += row

# HTML テンプレート文字列を Styler オブジェクトに設定
styler.template_string = template_string.format(rows=rows)

# HTML 形式の文字列を取得
html = styler.to_html()

# HTML 形式の文字列を表示
print(html)

このコードを実行すると、以下のような HTML 形式の DataFrame が表示されます。

列名
A1
A2
A3
B4
B5
B6
C7
C8
C9

各列は以下のスタイルが適用されています。

  • 列 C: 左揃え、青色
  • 列 B: 右揃え、イタリック体、背景色 #e0f0ff
  • 列 A: 中央揃え、太字、背景色 #ffe0e0

例 2: 奇偶行ごとに異なるスタイルを適用

この例では、奇偶行ごとに異なるスタイルを適用する方法を示します。

import pandas as pd

# データフレームを作成
data = {'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]}
df = pd.DataFrame(data)

# Styler オブジェクトを作成
styler = df.style

# HTML テンプレート文字列を作成
template_string = """
<style>
    table {
        border-collapse: collapse;
    }
    th, td {
        border: 1px solid #ddd;
        padding: 8px;
    }
    th {
        text-align: left;
        background-color: #f0f0f0;
    }
    tr:nth-child(even) {
        background-color: #f5f5f5;
    }
    tr:nth-child(odd) {
        background-color: #fff;
    }
</style>

<table>
    <thead>
        <tr>
            <th>列名</th>
            <th>値</th>
        </tr>
    </thead>
    <tbody>
        {rows}
    </tbody>
</table>
"""

# テンプレート文字列にデータ行を埋め込む
rows = ""
for i in range(


そこで、template_string の代替方法として、以下の方法を検討することができます。

Styler の他のカスタマイズ機能を使う

Styler には、template_string 以外にも、列幅の調整、フォントスタイルの設定、背景色の設定など、様々なカスタマイズ機能が用意されています。これらの機能を組み合わせることで、template_string を使わずに、ある程度のカスタマイズを行うことができます。

例:

import pandas as pd

# データフレームを作成
data = {'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]}
df = pd.DataFrame(data)

# Styler オブジェクトを作成
styler = df.style

# 列幅を調整
styler.set_column_width(100)

# フォントスタイルを設定
styler.set_props(font_size=12, font_family='Arial')

# 背景色を設定
styler.set_even_cell_bg_color('lightblue')
styler.set_odd_cell_bg_color('white')

# HTML 形式の文字列を取得
html = styler.to_html()

# HTML 形式の文字列を表示
print(html)

CSS フレームワークを使う

Bootstrap や Bulma などの CSS フレームワークを使うと、より簡単にスタイリングを行うことができます。これらのフレームワークは、あらかじめ定義されたスタイルクラスを提供しており、HTML テンプレートを記述する必要がありません。

import pandas as pd

# データフレームを作成
data = {'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]}
df = pd.DataFrame(data)

# Styler オブジェクトを作成
styler = df.style

# Bootstrap を適用
styler.set_css(
    """
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
    <style>
        table {
            width: auto !important;
        }
        th {
            background-color: #f0f0f0;
        }
        tbody tr:nth-child(odd) {
            background-color: #f5f5f5;
        }
    </style>
    """,
    prefix="bootstrap",
)

# HTML 形式の文字列を取得
html = styler.to_html()

# HTML 形式の文字列を表示
print(html)

ライブラリを使う

PrettyPrinttabulate などのライブラリを使うと、シンプルな形式で DataFrame を表示することができます。これらのライブラリは、HTML 形式ではなく、テキスト形式で DataFrame を表示するため、template_string を使用する必要はありません。

import pandas as pd
from prettytable import PrettyTable

# データフレームを作成
data = {'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]}
df = pd.DataFrame(data)

# PrettyTable を使って表示
table = PrettyTable()
table.field_names = df.columns
table.add_rows(df.values.tolist())
print(table)

Excel や Google スプレッドシートを使う

Excel や Google スプレッドシートなどの表計算ソフトを使うと、視覚的にわかりやすい形式で DataFrame を編集することができます。これらのソフトは、豊富な書式設定機能を備えているため、template_string を使用することなく、詳細なカスタマイズを行うことができます。

pandas.io.formats.style.Styler.template_string は、高度なカスタマイズを可能にする強力な機能ですが、複雑で習得に時間がかかるという欠点があります。