Streamlitでdataframeを表示させる

Python
この記事は約6分で読めます。
スポンサーリンク

StreamlitでpandasのDataframeの結果を表形式で表示する方法は簡単なのですが色々な表示方法があったので備忘録として残しておきます。表示させる方法はst.dataframeで表示する方法とst.tableで表示する方法があります。実際は、st.writeでも表示できますがst.dataframeの方がより細かい設定ができて、表示も同じなのでここでは割愛します。

StreamlitでpandasのDataframeを表示する方法

まずは表示させるためのdataframeを作成します。今回は直接列名を指定して作ります。
国語、算数,英語のテスト結果を適当に作ってみました。

import streamlit as st
import pandas as pd


df = pd.DataFrame({'Japanese': [55, 96, 76, 82,67],
                   'Mathmatics': [44, 77, 54, 67, 88],
                   'English': [67, 54, 76, 91, 68]})
st.subheader('テスト結果')

上記で表示させるとテーブルは表示されない状態で、テスト結果と表示されていると思います。

st.dataframeで表示

st.dataframeで表示すると以下のようになります。

import streamlit as st
import pandas as pd


df = pd.DataFrame({'Japanese': [55, 96, 76, 82,67],
                   'Mathmatics': [44, 77, 54, 67, 88],
                   'English': [67, 54, 76, 91, 68]})
st.subheader('テスト結果')
st.dataframe(df)

st.tableで表示

次にst.tableで表示してみます。少し幅が広くなりました。

import streamlit as st
import pandas as pd


df = pd.DataFrame({'Japanese': [55, 96, 76, 82,67],
                   'Mathmatics': [44, 77, 54, 67, 88],
                   'English': [67, 54, 76, 91, 68]})
st.subheader('テスト結果')
st.table(df)

Streamlitで表を表示させたい場合は、pandasでデータフレームを作って、st.dataframe(df) or st.table(df)でカッコ内にデータフレーム変数を渡せば簡単に表示されます。
次に、tableとdataframeの特徴について説明します。

st.dataframeとst.tableの特徴

st.dataframeの特徴

st.dataframeの特徴としては以下が挙げられます。

  • 表示される表の列単位で昇順/降順ソートができる。
  • 幅と行の高さが調整できる。

昇順/降順ソートができて動的なテーブルが作成できる

st.dataframeで表を表示するとデフォルトで列ごとにソートがかけられるようになっています。(Englishを降順にしたとき)

幅・行の高さの指定

st.dataframe(df ,横幅,縦高さ)で縦横の幅と高さを調整することが可能です。

以下の場合は表の幅:600と高さ:100したときの表示画面です。

import streamlit as st
import pandas as pd


df = pd.DataFrame({'Japanese': [55, 96, 76, 82,67],
                   'Mathmatics': [44, 77, 54, 67, 88],
                   'English': [67, 54, 76, 91, 68]})
st.subheader('テスト結果')
st.dataframe(df,600,100)

【注意点1】

不便な点としてStreamlitの仕様上、データに幅を自動調整する仕様になっているようで
横幅を広くしたい場合などはデータ内容または、ヘッダーの文字数を広げないと幅が広がりませんでした。ヘッダーの文字を広げると幅も広がります。横幅を600→700などに変更しても横幅は広がりませんでした。ヘッダーの文字を増やすと幅が広がります。

以下は各ヘッダーにスペースを5つ挿入した表です。

【注意点2】

もう一つ注意点としてヘッダーが日本語の場合は何故か途中でヘッダーの文字列が切れてしまいます。現段階では、実データより長いヘッダーの場合は英語で表示しないとダメみたいです。

2022/10/05 追記
hiroさんよりコメントいただき、Streamlit Version 1.13.0以降は日本語のヘッダーでも文字列が切れなくなりました。

styleを使用して最大値や最小値のハイライト表示

よく使用するオプションで列や行の最大値や最小値の値をハイライト表示してくれる機能もあります。以下のようにstyleを設定すれば簡単にできるので便利です。

#列単位ででMAXにハイライト表示
st.dataframe(df.style.highlight_max(axis=0))
st.dataframe(df.style.highlight_min(axis=1))

st.tableの特徴

st.tableは、dataframeと違って、昇順/降順のソートには対応していませんが、画面に均等にテーブルを表示してくれます。場合によってはこちらの方が見栄えが良くなることもあります。styleの変更は、dataframeと同様に変更可能です。st.dataframeは動的に対してst.tableは、静的なテーブルが作成されます。

※表のカラム名やデータの中身に日本語が含まれている場合は、st.tableを使った方が見栄えが良くなることが多いです。ただし、ソートなどはできないのでdataframeで表示してみて文字が切れてしまうようなことがあれば、tableで表示してみるのがいいかもしれません。

まとめ

その他にもいろいろな設定ができるのでリファレンスを参照してみてください。個人的には日本語のヘッダーの場合にdataframeの場合は、文字列が切れてしまう事象を解消してほしいと思っています。2つの主な違いを認識して使い分けたらよいと思います。

  • st.dataframeと昇順・降順ソートができるがst.tableはできない。
  • st.tableは画面均等に表を表示するがdataframeは、サイス指定ができる
    (日本語の場合は切れてしまうが・・・・)

実際はこの2つの機能はこれだけではなく違いはまだまだあるので、使ってこの違いは知っていると便利なことがあったらまた紹介したいと思います。

コメント

タイトルとURLをコピーしました