Skip to content

Streamlit DataFrame:Pandas DataFramesの表示、スタイリング、最適化(2025年版)

データサイエンスの領域では、データを可視化しインタラクティブに扱う能力が極めて重要です。StreamlitというPythonライブラリは、数行のコードでデータ豊富なウェブアプリを作れるようにしてくれます。Streamlitの最も強力な機能の一つが、Pandas DataFrameとのシームレスな統合です。本記事では、Streamlit DataFrameの世界を掘り下げ、Pandas DataFrameをモダンなStreamlitアプリで表示、スタイリング、最適化する方法を解説します。基本的な使い方から高度なヒントまで、2025年時点の最新機能に合わせてわかりやすくチュートリアル形式で進めます。

Streamlit DataFrameとは?

Streamlit DataFrameとは、Streamlitアプリ内でPandas DataFrame(または類似の表形式データ)を表示することを指します。Jupyterノートの静的な表をウェブアプリのインタラクティブな要素に変えるイメージです。内部では、StreamlitはPandas(およびPyArrowやPolarsなどの他のデータ構造)を活用してデータを扱い、それらをウェブ向けインターフェースにラップします。Pandas DataFrameは2次元のラベル付きデータ構造で、データサイエンスで広く使われています。StreamlitはPandasの上に、DataFrameをリアルタイムでインタラクティブに表示・操作できるプラットフォームを提供します。生のテーブルを見るだけでなく、列のソート、データのフィルタ、重要な値のハイライト、さらにはユーザーによるデータ編集などが、Streamlitの直感的なコンポーネントを通じて実現できます。

Streamlit DataFrame チュートリアル

このすばらしいデータ分析・可視化ツールを聞いたことがありますか?Streamlitアプリを簡単にTableauのように変換できます。

PyGWalker (opens in a new tab) は、あなたのStreamlitアプリにTableau代替のUIを簡単に埋め込めるPythonライブラリです。 詳細な手順を示す素晴らしいビデオ how to explore data with pygwalker (opens in a new tab) をチェックして、Streamlitアプリにこの強力な Data Visualization Python Library を導入する方法を学んでください!


Streamlit DataFrameの始め方

まずはStreamlitがインストールされていることを確認してください。pipでインストールできます:

pip install streamlit

Pythonスクリプト内でStreamlitとデータ操作用のPandasをインポートします:

import streamlit as st
import pandas as pd

次に、表示するシンプルなDataFrameを作成します。例として果物の小さなデータセットを使います:

data = {
    "Fruit": ["Apple", "Banana", "Cherry", "Date", "Elderberry"],
    "Quantity": [10, 15, 20, 25, 30],
    "Price": [0.5, 0.25, 0.75, 1.0, 2.0]
}
df = pd.DataFrame(data)

このDataFrameをStreamlitアプリに表示するには、st.dataframe()関数を使います:

st.dataframe(df)

Streamlitアプリを実行すると(streamlit run your_script.py)、インタラクティブなテーブルとしてDataFrameがレンダリングされます。列ヘッダーをクリックしてソートしたり、右下をドラッグしてサイズを変更したりできます。最新のStreamlitでは、検索、クリップボードへのコピー、CSVとしてのダウンロードなどを行えるツールバーが付いていることが多いです。デフォルトでは、st.dataframeは高さを調整して最大約10行分を表示し、それ以上の行がある場合はテーブル内にスクロールバーが出ます。この基本例で始めるのは非常に簡単です。次に、表示のカスタマイズや大規模データの扱い方を見ていきます。

StreamlitでのDataFrame表示

DataFrameをインタラクティブな表として表示する方法

前述のように、StreamlitでDataFrameを表示するのはst.dataframe(df)を呼ぶだけで簡単です。しかし表示だけでなく、見た目やインタラクティビティをカスタマイズすることができます。 カスタムサイズ:アプリのレイアウトに合わせてDataFrameコンポーネントのサイズを設定できます。例えばテーブル表示の高さ(ピクセル)を制限するには:

st.dataframe(df, height=300)

上のコードでは、DataFrameは縦方向に300ピクセルの空間を占め(およそ10行分を表示)、それ以上の行があるとテーブル内にスクロールバーが表示されます。同様に幅も制御できます。最近のバージョンでは、st.dataframewidthパラメータを受け取り(またはwidth="stretch"でコンテナ幅に広げることができます)。例えば:

st.dataframe(df, width="stretch", height=300)

これにより、テーブルはアプリのカラム/コンテナの全幅に伸び、高さは固定されます。(注:以前のuse_container_width=Trueパラメータは、最新APIではwidth="stretch"に置き換えられています。) インタラクティブ機能:StreamlitのDataFrame表示は静的ではなく、インタラクティブなデータグリッドで動作します。ユーザーはテーブルUI上で以下の操作が可能です:

  • 列のソート:列ヘッダーをクリックして昇順/降順に並べ替え。
  • 列のリサイズや並べ替え:列の境界をドラッグしてサイズ変更、ヘッダーをドラッグして列を並べ替えや固定。
  • 列の非表示:ヘッダーのメニュー(通常はオーバーフローの「⋮」メニュー)を使って特定の列を隠したり表示したり。
  • 検索:テーブルのツールバーにある検索ボックス(または Ctrl+F/Cmd+F)でデータ内を検索。
  • コピー&ダウンロード:セルを選択して Ctrl+C/Cmd+C でコピー、またはツールバーのダウンロードボタンでCSVとしてダウンロード。

これらの機能はst.dataframeを使えばデフォルトで利用でき、データ探索に強力なツールとなります。

データのハイライトと条件付き書式

DataFrame内の特定の値に注目させたいことがよくあります。そのための便利な方法がPandas Stylerを使った条件付き書式の適用です。StreamlitはPandas Stylerオブジェクトのレンダリングをサポートしており、highlight_maxhighlight_minbackground_gradientなどのメソッドを使ってスタイリングした後、そのStylerオブジェクトをStreamlitに渡せます。例えば各列の最大値をハイライトするには:

st.dataframe(df.style.highlight_max(axis=0))

この例では、各列の最大値が(デフォルトのハイライトスタイルで)強調表示されます。スタイリングはさらにカスタマイズ可能で、別のStylerメソッドを使えます。別の例として、各列の値に基づいて色のグラデーションを適用するには:

st.dataframe(df.style.background_gradient(cmap="Blues"))

これにより、セルの背景色が値の大きさに応じて薄い青から濃い青へと変わり、分布を一目で把握しやすくなります。Streamlitはこれらのスタイル付きDataFrameを表示しますが、Pandasの高度なスタイリング機能(例えばセル内の棒グラフやツールチップなど)はStreamlitのテーブルで完全にはサポートされない場合があります。色やテキスト、基本的なフォーマットについての一般的なスタイリングは問題なく機能します。

大規模DataFrameの扱い方

何千行、あるいは何百万行という大規模DataFrameを扱うのはどのウェブアプリでも難題です。Streamlitのテーブルコンポーネントはパフォーマンスを考慮して設計されており、効率的な仮想化(表示領域のみを描画)やHTMLキャンバスを用いて大きなデータにも対応します。しかし、それでも大きなデータを扱う際には実務上の配慮が必要です:

  • ブラウザとネットワークの制限:通常、全データはStreamlitサーバーからブラウザに送られます。極端に大きなデータセットはWebSocketのメッセージサイズ制限に引っかかったり、ブラウザのメモリを消費し尽くす可能性があります。例えば、100万行のDataFrameを送ろうとすると、処理自体は可能でも送信やクライアント側のレンダリングが遅くなることがあります。
  • 自動最適化:Streamlitは大きなテーブルを扱う際に一部の機能を自動的に無効化して応答性を保ちます。例えば、データセットが約150,000行を超えると、レンダリング速度向上のために列ソートがオフになることがあります。非常に大きなテーブルは、パフォーマンスを維持するためにすべてのインタラクティブ機能をサポートしない場合があります。
  • 大規模データのベストプラクティス:
    • データのサブセットを表示:一度に巨大なDataFrame全体をst.dataframeに出力するのではなく、フィルタやサンプリングしたサブセットを表示することを検討してください。ユーザーに表示する列や日付範囲を選ばせる、または先頭N行のみを表示してページングで切り替えられるようにするなどが有効です。
    • シンプルなページネーションを実装:手動でページネーションを作る方法があります。スライダーや数値入力でページ番号を選ばせ、DataFrameをスライスして表示する一例:
page_size = 100  # rows per page
total_rows = len(df)
total_pages = (total_rows - 1) // page_size + 1
 
page = st.number_input("Page", min_value=1, max_value=total_pages, value=1)
start_idx = (page - 1) * page_size
end_idx = start_idx + page_size
st.write(f"Showing rows {start_idx} to {min(end_idx, total_rows)}")
st.dataframe(df.iloc[start_idx:end_idx])

この例では、ユーザーはページ番号を選択して100行ずつデータを閲覧できます。これによりアプリが一度に全データをレンダリングするのを防ぎ、応答性が向上します。

  • レイジーなデータフレームを活用:StreamlitはPySparkやSnowflake(Snowpark)のようなデータフレームソースからの表示も可能です。これらは必要なデータだけを取り出す設計で、フィルタや制限を適用するとバックエンド(データベースやSparkエンジン)側で処理され、結果だけがStreamlitに送られます。データが非常に大きく、データベースやビッグデータ基盤に存在する場合は、全てをPandas DataFrameに読み込むのではなく、チャンクでクエリしたりレイジー評価を活用することを検討してください。
  • データ読み込みのキャッシュを使う:(詳細は後のセクションで扱いますが)大きなデータセットを何度も読み込むのを避けるため、データ取得処理をキャッシュしてください。

これらの戦略を念頭に置けば、Streamlitで大規模データをよりスムーズに扱えます。重要なのはフロントエンドに過度な負荷をかけないことと、Streamlitのパフォーマンス機能を活かすことです。

StreamlitでのDataFrameのスタイリング

データを表示することと、それを見やすく読みやすくすることは別物です。Streamlitは組み込みのフォーマットオプションからカスタムCSSまで、DataFrameの見た目を改善する方法を複数提供します(ただし注意点あり)。ここではテーブルの外観を強化する方法を見ていきます。

StreamlitでDataFrameをCSSでスタイリングできますか?

DataFrameに対してウェブページのようなカスタムCSSを適用できるか気になるかもしれません。短い答えは「はい、ただし注意が必要」です。Streamlitではst.markdownunsafe_allow_html=Trueを渡すことでHTML/CSSを注入できます。これによりテーブル要素をターゲットにしたCSSを試すことができます。例えばテーブルの背景色を変えるには:

st.markdown(
    """
    <style>
    table { background-color: #f0f0f0; }
    </style>
    """,
    unsafe_allow_html=True
)
st.dataframe(df)

このスニペットでは、<style>ブロックを挿入してすべてのHTMLの<table>背景色を薄いグレーに設定しています。これは基盤となるレンダリングが標準的なHTMLテーブル要素を使用している場合にDataFrameのスタイルに影響するかもしれません。ただし注意点があります:

  • このアプローチは公式にサポートされている方法ではなく、Streamlitの内部実装が変わると壊れる可能性があります。実際、現代のst.dataframeはデータセルに単純なHTMLテーブルを使わずにHTMLキャンバスを用いることがあり、 CSSセレクタが期待通りに適用されない場合があります。
  • unsafe_allow_html=Trueの使用は、グローバルに誤ってスタイルを適用してしまうなどのセキュリティや安定性の問題を引き起こす可能性があるため、短期的なハック以外では推奨されません。

まとめると、軽微な調整(背景色やフォントスタイルの設定など)にはCSSを使える場合がありますが、可能ならStreamlitの組み込みスタイリング機能を使う方が安全です。

Pandasおよびcolumn_configを使ったStreamlitのDataFrameスタイリング

StreamlitでDataFrameをスタイリングするより堅牢な方法は、Pandas Styler(前節で示したhighlight_maxbackground_gradientのような)や、Streamlitの列設定(column_config)を使うことです。Pandas Styler:Pandasの多くのスタイリング関数を適用できます。例えば:

  • df.style.format(format_dict) – 各列の数値や日付をフォーマット(例:浮動小数点をパーセンテージや通貨で表示)。
  • df.style.applymap(func) – 要素ごとのスタイリング関数を適用(例:負の数を赤にする)。
  • df.style.set_properties(**props) – 特定セルにCSSプロパティを設定(ただし全てがStreamlitで反映されるわけではありません)。
  • df.style.hide(axis="index") – 表示上インデックスを隠す。

Stylerでスタイリングした後、そのStylerオブジェクトをst.dataframe()に渡します(highlight_maxの例と同様)。 列設定(column_config):Streamlit(v1.22+)はst.dataframest.data_editorcolumn_configパラメータを導入しており、列の表示方法をカスタマイズできます。これはPython的に列の表示方法を指定する手段で、例えば:

  • 列ラベル(表示上の名前)を変更する(DataFrame自体は変更しない)。
  • 特定の列を非表示にする。
  • データ型の表示方法を指定(Image列、Link列、Checkbox、Datetimeなど)し、レンダリングを変更する。
  • 数値や日付のフォーマット指定(Stylerと似ていますがStreamlit API経由)。

例えば、価格の列をUSドル表示にして列ヘッダーを変更する例:

import streamlit as st
import pandas as pd
 
df = pd.DataFrame({
    "item": ["A", "B", "C"],
    "price": [1.5, 2.0, 3.25]
})
 
st.dataframe(
    df,
    column_config={
        "price": st.column_config.NumberColumn(
            "Price (USD)",
            format="$%.2f"
        )
    }
)

このスニペットでは:

  • price列の表示名をPrice (USD)に変更。
  • その列の数値をドル表記で小数点以下2桁にフォーマット。

この方法はカスタムCSSを使わずに見栄えの良い表を作成でき、Streamlitのインタラクティブグリッドでも動作します。列を非表示にしたいときは、その列の設定をNoneにするか、画像やブール値などに応じた他の設定タイプを使えます。まとめると、一般的なタスクにはPandas StylerやStreamlitの列設定を使うのが、カスタムCSSよりも安定的かつ表現力豊かな選択です。

StreamlitでのDataFrame最適化

複雑なアプリを作ったり大きなデータセットを扱うと、パフォーマンスが重要になります。このセクションでは、StreamlitでのDataFrame利用を高速かつ効率的にする方法、特にキャッシュとベストプラクティスに焦点を当てて説明します。

StreamlitでPandas DataFrameを最適化する方法

ここでの最適化とは、アプリの性能(読み込み時間、応答性)とリソース使用(メモリなど)の両方を指します。主な戦略は次の通りです:

ストリームリットのキャッシュをデータ読み込みや計算に使う:アプリを高速化する最も簡単な方法は、コストの高い処理を繰り返さないことです。大きなCSVやデータベースからの読み込みを毎回実行すると遅くなります。Streamlitはキャッシュ機構を提供しており、データ(DataFrameなど)を返す関数には@st.cache_dataを使うべきです。例:

import pandas as pd
import streamlit as st
 
@st.cache_data
def load_data():
    # Imagine this is an expensive operation, e.g., reading a large CSV
    df = pd.read_csv("large_dataset.csv")
    # (You could do additional processing here if needed)
    return df
 
# Use the cached function to load data
df_large = load_data()
st.dataframe(df_large.head(100))  # Display just first 100 rows as an example

@st.cache_dataを使うと、最初の実行ではCSVを読み込み結果のDataFrameをキャッシュします。以降の実行やユーザーによるアプリの再実行で関数の入力が変わらなければ、load_data()の再実行をスキップしてキャッシュからDataFrameを返します。これにより同じデータを何度も読み込むコストを大幅に削減できます。

DataFrameのサイズと型を最適化:大きなDataFrameは適切なデータ型に変換することでメモリを節約できます。例えばカテゴリカルなテキストデータはPandasのCategorical型に変換するとメモリ節約になります。0/1やTrue/Falseしか取らない列は整数ではなくboolean型にする、浮動小数点で高精度が不要ならfloat32にダウンキャストするなどが有効です。Pandasでのこれらの最適化はメモリ使用量を減らし、限られたリソースで動かす場合にStreamlitアプリのパフォーマンス改善につながります。

効率的なデータ形式を使う:データのソースを制御できるなら、ParquetやArrowのようなバイナリ形式を使うとCSVよりも読み込みが高速です。StreamlitはArrowテーブルを直接読み込めるなど効率的に扱えるため、これもキャッシュと合わせると効果的です。

次に、キャッシュとパフォーマンスの詳細なヒントを見ていきます。

Streamlit DataFrameのキャッシュとパフォーマンスヒント

キャッシュは強力ですが、正しく使うことが重要です。以下のヒントとベストプラクティスを参考にしてください:

適切なキャッシュデコレータを選ぶ:データ計算やクエリ(DataFrame、リスト、辞書などを返す関数)には@st.cache_dataを使い、シングルトンのリソース(データベース接続、MLモデル、初期化が高コストなオブジェクトなど)には@st.cache_resourceを使いましょう。旧来の@st.cacheは置き換えて、新しいデコレータを使うことで非推奨警告を避け、ユースケースに応じた最適化が行えます。

関数入力がキャッシュキーになる:キャッシュされた関数はその入力引数に基づいて無効化されます。引数が変わると関数は再実行され、新たな結果がキャッシュされます。例えば:

@st.cache_data
def load_data(filename):
    return pd.read_csv(filename)
 
file_choice = st.selectbox("Choose a data file", ["data1.csv", "data2.csv"])
df = load_data(file_choice)
st.dataframe(df.head())

この場合、ユーザーが"data1.csv"から"data2.csv"に切り替えると、load_dataは新しいファイル名で再実行され、その結果が別個にキャッシュされます。元に戻すとキャッシュから取得されます。これにより複数のデータセットを効率的に扱えます。

キャッシュされたデータを変更しない:キャッシュされたオブジェクトをそのまま変更するのは罠です。例えばDataFrameをキャッシュしてその後インプレースで編集すると、キャッシュされたオブジェクトが変わり予期せぬ挙動を招くことがあります。st.cache_dataはキャッシュから返す際に新しいコピーを返す仕組みを持つため、この問題は軽減されます。古いallow_output_mutation=Trueのようなオプションは新システムでは不要になることが多いです。もしミューテーションを前提としたキャッシュが必要なら、st.cache_resourceの利用を検討しますが、その場合は挙動を明確にドキュメント化してください。

必要に応じてキャッシュをクリアする:外部データが更新されキャッシュを更新する必要がある場合、ユーザーが手動でキャッシュをクリアできるボタンを設置したり、TTL(time-to-live)や外部データのバージョンハッシュをキャッシュキーに組み込む方法があります。例えばデータが日次で更新されることが分かっている場合、現在の日付をキャッシュキーに含めるか、@st.cache_data(ttl=86400)で1日後にキャッシュが期限切れになるように設定すると、古いデータに縛られることを避けられます。

DataFrameのレンダリングサイズを制限する:キャッシュがあっても、巨大なDataFrameをブラウザにレンダリングするのは遅くなります。表示するDataFrameの量を制限するのが賢明です。前述のheightや手動ページネーションの使用、または大規模データの要約やサンプルのみを表示し、必要に応じてフルデータのダウンロードやオンデマンド表示にするなどの方法があります。アプリはその時点でユーザーが必要とする情報に焦点を当て、ブラウザに過度な負荷をかけないことが重要です。

これらのキャッシュとパフォーマンスのヒントに従えば、データが増えてもStreamlitアプリの応答性を保つことができます。

Streamlit DataFrame:応用的なユースケース

このセクションでは、Streamlit DataFrameが重要な役割を果たす実用的でやや高度なシナリオをいくつか紹介します:インタラクティブなフィルタリングと、機械学習ワークフローへのDataFrameの統合です。

Streamlit DataFrameのフィルタリング

データ探索においてフィルタリングは基本中の基本です。Streamlitのウィジェットを使えば、DataFrame表示に対して簡単にインタラクティブなフィルタを追加できます。静的なサブセットを事前定義する代わりに、ユーザーがフィルタの条件を選べるようにすると良いです。例えば、ある数値列の値の範囲でDataFrameをフィルタリングできるようにする場合、スライダーで範囲を選び、どの列をフィルタに使うかをselectboxで選ばせることができます:

# Assume df is already loaded
column = st.selectbox("Select column to filter", df.columns)
if pd.api.types.is_numeric_dtype(df[column]):
    min_val, max_val = int(df[column].min()), int(df[column].max())
    # Slider to pick a range within [min, max]
    range_values = st.slider(f"Filter {column} between:", min_val, max_val, (min_val, max_val))
    # Filter the dataframe based on slider
    filtered_df = df[(df[column] >= range_values[0]) & (df[column] <= range_values[1])]
else:
    # If non-numeric, maybe use multiselect for categories
    options = st.multiselect(f"Filter values for {column}:", df[column].unique(), default=list(df[column].unique()))
    filtered_df = df[df[column].isin(options)]
 
st.dataframe(filtered_df)

この例では:

  • まずユーザーにフィルタ対象の列を選ばせます。
  • 選択した列が数値型なら、その列の最小値と最大値を使ってレンジスライダーを表示し、ユーザーの選択に基づいて(min_val, max_val)のタプルを得ます。これによりDataFrameをその範囲でフィルタします。
  • 非数値(文字列やカテゴリ)であれば、multiselect ウィジェットを使って含める値を選ばせ、それに基づいてフィルタします。
  • 最後にfiltered_dfを表示します。

このパターンは様々な状況に応用できます:複数のフィルタを同時に適用したり、列ごとに異なるウィジェット(日時列には日付ピッカー、文字列には部分一致検索など)を用意したりできます。結果として、ユーザーはデータを自由にスライス&ダイスして、条件に合ったデータを即座に確認できます。

機械学習アプリでのStreamlit DataFrame活用

Streamlitは静的データ表示だけでなく、インタラクティブな機械学習デモやダッシュボードの構築にも適しています。DataFrameはトレーニングデータのプレビュー、特徴量重要度の表示、ユーザーがアップロードした新規データの予測など、様々な場面で利用されます。簡単な例として、ユーザーがボタンを押すとモデルをトレーニングし、その結果を表示するアプリを考えてみましょう。DataFrameでトレーニングデータを表示し、Streamlitのウィジェットでインタラクションを管理します:

from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
 
# Display the DataFrame (e.g., training dataset preview)
st.dataframe(df)
 
# Let user trigger model training
if st.button("Train Model"):
    # Assume 'target' is the label column in df
    if 'target' not in df.columns:
        st.error("No target column found in data!")
    else:
        # Split the data
        X = df.drop('target', axis=1)
        y = df['target']
        X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
        
        # Train a simple RandomForest model
        model = RandomForestClassifier(n_estimators=100, random_state=42)
        model.fit(X_train, y_train)
        
        # Evaluate the model
        preds = model.predict(X_test)
        accuracy = accuracy_score(y_test, preds)
        
        # Display accuracy result
        st.write(f"**Model Accuracy:** {accuracy*100:.2f}%")

このスニペットで行っていることは次の通りです:

  • dfを表示してユーザーが生データを確認できるようにする。
  • 「Train Model」ボタンを用意し、ユーザーがそれを押すとif st.buttonブロック内のコードが実行される。
  • target列が存在するかの簡単なチェックを行う(これがラベル列である想定)。
  • DataFrameを特徴量(X)とターゲット(y)に分割し、訓練用とテスト用に分割する。
  • scikit-learnのRandomForestClassifierを初期化して訓練する。
  • テストセットで予測して精度を計算する。
  • st.writeで精度を表示する。

この単純な例は、DataFrame表示とインタラクティブなコントロールを組み合わせて、機械学習のミニパイプラインをStreamlit上に作れることを示しています。ユーザーがハイパーパラメータ(木の数やテスト分割比率など)をスライダーで調整したり、異なるモデルを選択したり、予測結果や誤分類例のDataFrameを表示したりすることで、実験が容易になります。StreamlitのインタラクティブなDataFrameとウィジェットを活用すれば、スクリプトを実際に操作できるアプリに変えられます。

結論

Streamlitはインタラクティブなデータアプリをこれまで以上に簡単に構築できるようにし、Pandas DataFrameとの統合は強力な機能をもたらします。本記事では、StreamlitでのDataFrame表示に関する基本から高度なカスタマイズまでをカバーしました。データの可読性を高めるスタイリング方法、大規模データを効率的に扱う方法、インタラクティブなフィルタリングや機械学習のユースケースにおけるDataFrameの役割についても解説しました。2025年時点での最新のアップデートにより、st.dataframeは以前よりも高機能かつ高性能になっており、ソート、検索、ダウンロード、そして大規模データに耐える高速なグリッドレンダリングを備えています。また、ユーザーにデータの編集を許可したい場合はst.data_editorも紹介しました。経験豊富なデータサイエンティストでも初心者でも、Streamlitはデータの洞察を共有するための使いやすく強力なプラットフォームを提供します。ノートブックで静的だったDataFrameをStreamlitアプリにすると、インタラクティブな探索ツールに変わります。実践する際はキャッシュを活用してパフォーマンスを確保し、ユーザー体験を考慮して最も関連性の高いデータスライスを表示すること、そして豊富なスタイリングオプションを使ってデータを分かりやすく伝えることを心がけてください。ぜひこれらの手法を自分のStreamlitアプリで試してみてください。DataFrameをインタラクティブな表に変え、ダッシュボードを構築し、次のすばらしいデータサイエンスWebアプリを作りましょう。PandasとStreamlitを組み合わせれば可能性は無限大です。

このすばらしいデータ分析・可視化ツールを聞いたことがありますか?StreamlitアプリをTableauのように変換できます。

PyGWalker (opens in a new tab) は、あなたのStreamlitアプリにTableau代替のUIを簡単に埋め込めるPythonライブラリです。

PyGWalker for Data visualization in Streamlit (opens in a new tab)

よくある質問

StreamlitでDataFrameをどのようにスタイリングできますか? – PandasのスタイリングとStreamlitの表示オプションの両方を使ってDataFrameをスタイリングできます。例えば、Pandas Stylerのhighlight_maxbackground_gradientを使って色で強調表示したり、st.markdownunsafe_allow_html=True)でカスタムCSSを適用して細かい調整を行ったりできます(ただし高度で制限があります)。さらに、st.dataframecolumn_configを活用すると、列ごとの数値フォーマットやインデックスの非表示などを簡単に設定できます。

StreamlitでDataFrameをどのようにフィルタリングできますか? – Streamlitのインタラクティブウィジェットを使うとフィルタリングが簡単です。カテゴリフィルタにはst.selectboxst.multiselect、数値範囲にはst.slider、テキスト検索にはst.text_inputなどを使います。これらウィジェットの値を使ってDataFrameをサブセット(例えばdf[df[column] == value]やpandasのブールインデックス)すれば、ユーザーがウィジェットを調整するたびにアプリがリアルタイムで更新され、フィルタされたデータが表示されます。

StreamlitのDataFrame内に画像を表示できますか? – Streamlitは画像表示をサポートしていますが、現時点ではst.dataframeのセル内に直接画像を埋め込むのは一般的ではありません。一般的なアプローチは、DataFrameに画像のURLやファイルパスを格納しておき、テーブルに埋め込む代わりにDataFrameをループしてst.image()で個別に表示するか、st.columnsでグリッド表示することです。サムネイルのURLが小さい場合や、対応するcolumn configurationでImage列を指定できる機能が有効な場合は、列として画像を表示できることもありますが、一般的にはst.imageなどの別のStreamlit呼び出しで扱うのが現実的です。いずれにせよ、画像を表示するにはURLやアップロード済みのファイルなど、表示可能なアクセス手段が必要です。