サイトアイコン アマチュア無線局JS2IIU

Streamlitでデータ編集可能なテーブルGUIを実現!st.data_editorの使い方完全ガイド

こんにちは、JS2IIUです。

Streamlitのst.data_editorは、データをインタラクティブな編集可能テーブル形式で表示できる機能です。本記事では、st.data_editorのすべてのパラメータを解説し、実際に使えるサンプルコードを提供します。

st.data_editorの概要

st.data_editorを使うと、DataFrameや類似データ構造を次のような特徴を持つテーブルとして表示・編集できます。

公式のシグネチャは次の通りです:

Python
st.data_editor(
    data=None,
    *,
    num_rows="dynamic",
    column_order=None,
    column_config=None,
    hide_index=None,
    use_container_width=False,
    disabled=False,
    key=None
)

各パラメータの詳細

1. data

Python
import pandas as pd
df = pd.DataFrame({"名前": ["Alice", "Bob"], "得点": [85, 90]})
st.data_editor(df)

2. num_rows

Python
st.data_editor(df, num_rows="fixed")

3. column_order

Python
st.data_editor(df, column_order=["得点", "名前"])

4. column_config

Python
st.data_editor(
    df,
    column_config={
        "得点": {"name": "スコア", "editable": False},
        "名前": {"name": "氏名", "type": "text"}
    }
)

5. hide_index

Python
st.data_editor(df, hide_index=True)

6. use_container_width

Python
st.data_editor(df, use_container_width=True)

7. disabled

Python
st.data_editor(df, disabled=True)

8. key

Python
st.data_editor(df, key="unique_table")

実用例:サンプルコード集

例1: 基本的な編集可能テーブルの表示

Python
import pandas as pd
import streamlit as st

data = {"名前": ["Alice", "Bob", "Charlie"], "得点": [88, 92, 85]}
df = pd.DataFrame(data)

st.title("編集可能なテーブル")
edited_df = st.data_editor(df)
st.write("編集後のデータフレーム:")
st.write(edited_df)

プログラムの解説

  1. ライブラリのインポート
  1. データの準備
  1. アプリのタイトルを設定
  1. st.data_editorで編集可能なテーブルを表示
  1. 編集後のデータフレームを表示

動作のポイント

例2: 行を追加可能なテーブルの表示

Python
import pandas as pd
import streamlit as st

data = {"名前": ["Alice", "Bob", "Charlie"], "得点": [88, 92, 85]}
df = pd.DataFrame(data)

st.title("行を追加可能なテーブル")
# num_rows="dynamic" を指定して、行の追加を可能に
edited_df = st.data_editor(df, num_rows="dynamic")
st.write("編集後のデータフレーム:")
st.write(edited_df)

プログラムの解説

  1. ライブラリのインポート
  1. データの準備
  1. アプリのタイトルを設定
  1. st.data_editorで行を追加可能なテーブルを作成
  1. 編集後のデータフレームを表示

動作のポイント

実行例

初期データが以下のように表示されます:

名前得点
Alice88
Bob92
Charlie85

編集後にユーザーが新しい行を追加して「David, 95」を入力すると、以下のように更新されます:

名前得点
Alice88
Bob92
Charlie85
David95

カスタマイズ可能な拡張案

例3: LineChartColumnを表示するテーブル

Python
import pandas as pd
import streamlit as st

data = {
    "名前": ["Alice", "Bob", "Charlie"],
    "得点": [88, 92, 85],
    "月別スコア": [[10, 20, 30], [25, 30, 35], [40, 45, 50]],
}
df = pd.DataFrame(data)

st.title("LineChartColumnを使用したテーブル")
edited_df = st.data_editor(
    df,
    column_config={
        "月別スコア": st.column_config.LineChartColumn(
            "月別スコアの推移",
            y_min=0,
            y_max=50,
        ),
        "得点": {"name": "スコア", "editable": False},
    },
    use_container_width=True,
)
st.write("編集後のデータフレーム:")
st.write(edited_df)

プログラムの解説

  1. ライブラリのインポート
  1. データの準備
  1. アプリのタイトルを設定
  1. st.data_editorを使用してインタラクティブなテーブルを作成
  1. 編集後のデータフレームを表示

動作のポイント

実行例

初期テーブルが以下のように表示されます:

名前スコア月別スコア
Alice88折れ線グラフ(10,20,30)
Bob92折れ線グラフ(25,30,35)
Charlie85折れ線グラフ(40,45,50)

カスタマイズ可能な拡張案

  1. 他の列のビジュアル化
  1. グラフの動的範囲設定
  1. フィルタリング機能

まとめ

st.data_editorは、データのインタラクティブな編集を簡単に実現するための強力なツールです。この記事で解説した各パラメータを活用し、データ管理を効率化してみてください。

詳細な情報は、公式ドキュメントをご覧ください。

最後まで読んでいただきありがとうございました。

最後に、書籍のPRです。
24年9月に出版された「ハイパーモダンPython-信頼性の高いワークフローを構築するモダンテクニック」、Claudio Jolowicz著、嶋田、鈴木訳。開発環境の構築、プロジェクトの管理、テストに関して実践的な内容でとても参考になる一冊です。ぜひ手に取ってみてください。

最後まで読んでいただきありがとうございます。

モバイルバージョンを終了