star

提示

了解更多信息,请参阅我们的Dataframes指南,并查看我们的教程Get dataframe row-selections from users

将数据框显示为交互式表格。

此命令适用于多种类似集合和类似数据框的对象类型。

函数签名[source]

st.dataframe(data=None, width=None, height=None, *, use_container_width=False, hide_index=None, column_order=None, column_config=None, key=None, on_select="ignore", selection_mode="multi-row")

参数

data (dataframe-like, collection-like, or None)

The data to display.

Dataframe-like objects include dataframe and series objects from popular libraries like Dask, Modin, Numpy, pandas, Polars, PyArrow, Snowpark, Xarray, and more. You can use database cursors and clients that comply with the Python Database API Specification v2.0 (PEP 249). Additionally, you can use anything that supports the Python dataframe interchange protocol.

For example, you can use the following:

  • pandas.DataFrame, pandas.Series, pandas.Index, pandas.Styler, and pandas.Array
  • polars.DataFrame, polars.LazyFrame, and polars.Series
  • snowflake.snowpark.dataframe.DataFrame, snowflake.snowpark.table.Table

If a data type is not recognized, Streamlit will convert the object to a pandas.DataFrame or pyarrow.Table using a .to_pandas() or .to_arrow() method, respectively, if available.

If data is a pandas.Styler, it will be used to style its underlying pandas.DataFrame. Streamlit supports custom cell values and colors. It does not support some of the more exotic styling options, like bar charts, hovering, and captions. For these styling options, use column configuration instead. Text and number formatting from column_config always takes precedence over text and number formatting from pandas.Styler.

Collection-like objects include all Python-native Collection types, such as dict, list, and set.

If data is None, Streamlit renders an empty table.

width (int or None)

数据框的期望宽度,以像素表示。如果 widthNone(默认值),Streamlit 会将数据框宽度设置为适应其 内容,直到父容器的宽度。如果 width 大于 父容器的宽度,Streamlit 会将数据框宽度设置为与父容器的宽度匹配。

height (int or None)

数据框的期望高度,以像素表示。如果heightNone(默认值),Streamlit会将高度设置为最多显示十行。当高度无法容纳所有行时,数据框元素内的垂直滚动将被启用。

use_container_width (bool)

是否使用父容器的宽度覆盖width。如果use_container_widthFalse(默认),Streamlit会根据width设置数据框的宽度。如果use_container_widthTrue,Streamlit会将数据框的宽度设置为与父容器的宽度相匹配。

hide_index (bool or None)

是否隐藏索引列。如果 hide_indexNone (默认值),索引列的可见性将根据数据自动确定。

column_order (Iterable of str or None)

要显示的有序列的列。如果 column_orderNone(默认),Streamlit 会按照基础数据结构中的顺序显示所有列。如果 column_order 是一个列表,指定的列将按照它们在列表中出现的顺序显示。列可以在列表中省略或重复。

例如,column_order=("col2", "col1") 将首先显示 "col2",然后是 "col1",并隐藏所有其他非索引列。

column_config (dict or None)

配置以自定义列的显示方式。如果 column_configNone(默认),则根据每列的基础数据类型来设置列的样式。

列配置可以修改列名、可见性、类型、宽度或格式等。column_config 必须是一个字典,其中每个键是列名,关联的值是以下之一:

  • None: Streamlit 隐藏该列。
  • 字符串:Streamlit 将列的显示标签更改为给定的字符串。
  • st.column_config 中的列类型:Streamlit 将定义的配置应用于该列。例如,使用 st.column_config.NumberColumn("Dollar values”, format=”$ %d") 将列的显示名称更改为 "Dollar values" 并在每个单元格中添加 "$" 前缀。有关可用列类型和配置选项的更多信息,请参阅 列配置

要配置索引列,请使用 _index 作为列名。

key (str)

一个可选的字符串,用于给这个元素一个稳定的身份。如果 keyNone(默认值),这个元素的身份将基于其他参数的值来确定。

此外,如果启用了选择并且提供了 key,Streamlit 将在会话状态中注册该键以存储选择状态。选择状态是只读的。

on_select ("ignore" 或 "rerun" 或 callable)

数据框应如何响应用户选择事件。这控制数据框是否表现得像一个输入小部件。on_select 可以是以下之一:

  • "ignore"(默认):Streamlit 不会对数据框中的任何选择事件做出反应。数据框不会表现得像一个输入小部件。
  • "rerun":当用户在数据框中选择行或列时,Streamlit 将重新运行应用程序。在这种情况下,st.dataframe 将返回选择数据作为字典。
  • 一个 callable:Streamlit 将重新运行应用程序并在应用程序的其余部分之前执行 callable 作为回调函数。在这种情况下,st.dataframe 将返回选择数据作为字典。

selection_mode ("single-row", "multi-row", "single-column", "multi-column", 或这些的 Iterable)

当使用 on_select 启用选择时,Streamlit 应允许的选择类型。这可以是以下之一:

  • "multi-row"(默认):可以同时选择多行。
  • "single-row":一次只能选择一行。
  • "multi-column":可以同时选择多列。
  • "single-column":一次只能选择一列。
  • 上述选项的 Iterable:表格将允许基于指定模式的选择。

当启用列选择时,列排序将被禁用。

返回

(element or dict)

如果 on_select"ignore"(默认值),此命令返回一个 可用于 .add_rows() 方法的数据框元素的内部占位符。否则,此命令返回一个 支持键和属性表示法的类字典对象。属性由 DataframeState 字典模式描述。

示例

示例 1:显示一个数据框

import streamlit as st
import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(50, 20), columns=("col %d" % i for i in range(20)))

st.dataframe(df)  # Same as st.write(df)

示例 2:使用 Pandas Styler

你也可以传递一个Pandas Styler对象来改变渲染的DataFrame的样式:

import streamlit as st
import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(10, 20), columns=("col %d" % i for i in range(20)))

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

示例 3:使用列配置

您可以通过column_confighide_indexcolumn_order来自定义数据框。

import random
import pandas as pd
import streamlit as st

df = pd.DataFrame(
    {
        "name": ["Roadmap", "Extras", "Issues"],
        "url": ["https://roadmap.streamlit.app", "https://extras.streamlit.app", "https://issues.streamlit.app"],
        "stars": [random.randint(0, 1000) for _ in range(3)],
        "views_history": [[random.randint(0, 5000) for _ in range(30)] for _ in range(3)],
    }
)
st.dataframe(
    df,
    column_config={
        "name": "App name",
        "stars": st.column_config.NumberColumn(
            "Github Stars",
            help="Number of stars on GitHub",
            format="%d ⭐",
        ),
        "url": st.column_config.LinkColumn("App URL"),
        "views_history": st.column_config.LineChartColumn(
            "Views (past 30 days)", y_min=0, y_max=5000
        ),
    },
    hide_index=True,
)

示例 4:自定义您的索引

您可以使用列配置来格式化您的索引。

import streamlit as st
import pandas as pd
from datetime import date

df = pd.DataFrame(
    {
        "Date": [date(2024, 1, 1), date(2024, 2, 1), date(2024, 3, 1)],
        "Total": [13429, 23564, 23452],
    }
)
df.set_index("Date", inplace=True)

config = {
    "_index": st.column_config.DateColumn("Month", format="MMM YYYY"),
    "Total": st.column_config.NumberColumn("Total ($)"),
}

st.dataframe(df, column_config=config)

数据框事件状态的模式。

事件状态存储在一个类似字典的对象中,该对象支持键和属性表示法。事件状态不能通过会话状态以编程方式更改或设置。

目前仅支持选择事件。

属性

selection (dict)

on_select 事件的状态。此属性返回一个类似字典的对象,支持键和属性表示法。 属性由 DataframeSelectionState 字典模式描述。

数据框选择状态的模式。

选择状态存储在一个类似字典的对象中,该对象支持键和属性表示法。选择状态不能通过Session State以编程方式更改或设置。

警告

如果用户对数据框进行排序,行选择将被重置。如果您的用户需要排序和过滤数据框以进行选择,请引导他们使用数据框工具栏中的搜索功能。

属性

rows (list[int])

选定的行,通过它们的整数位置标识。这些整数位置与原始数据框匹配,即使用户在浏览器中对数据框进行了排序。对于pandas.DataFrame,您可以使用.iloc[].iat[]等方法从其整数位置检索数据。

columns (list[str])

选定的列,通过它们的名称标识。

示例

以下示例启用了多行和多列选择。 尝试选择一些行。要选择多个列,请在选择列时按住Ctrl。 按住Shift可以选择一系列列。

import streamlit as st
import pandas as pd
import numpy as np

if "df" not in st.session_state:
    st.session_state.df = pd.DataFrame(
        np.random.randn(12, 5), columns=["a", "b", "c", "d", "e"]
    )

event = st.dataframe(
    st.session_state.df,
    key="data",
    on_select="rerun",
    selection_mode=["multi-row", "multi-column"],
)

event.selection

将数据框连接到当前数据框的底部。

函数签名[source]

element.add_rows(data=None, **kwargs)

参数

data (pandas.DataFrame, pandas.Styler, pyarrow.Table, numpy.ndarray, pyspark.sql.DataFrame, snowflake.snowpark.dataframe.DataFrame, Iterable, dict, or None)

要连接的表格。可选。

**kwargs (pandas.DataFrame, numpy.ndarray, Iterable, dict, or None)

要连接的有名称的数据集。可选。你只能传入1个数据集(包括在data参数中的那个)。

示例

import streamlit as st
import pandas as pd
import numpy as np

df1 = pd.DataFrame(
    np.random.randn(50, 20), columns=("col %d" % i for i in range(20))
)

my_table = st.table(df1)

df2 = pd.DataFrame(
    np.random.randn(50, 20), columns=("col %d" % i for i in range(20))
)

my_table.add_rows(df2)
# Now the table shown in the Streamlit app contains the data for
# df1 followed by the data for df2.

你可以对图表做同样的事情。例如,如果你想在折线图中添加更多数据:

# Assuming df1 and df2 from the example above still exist...
my_chart = st.line_chart(df1)
my_chart.add_rows(df2)
# Now the chart shown in the Streamlit app contains the data for
# df1 followed by the data for df2.

对于数据集已命名的图表,您可以使用关键字参数传递数据,其中键是名称:

my_chart = st.vega_lite_chart(
    {
        "mark": "line",
        "encoding": {"x": "a", "y": "b"},
        "datasets": {
            "some_fancy_name": df1,  # <-- named dataset
        },
        "data": {"name": "some_fancy_name"},
    }
)
my_chart.add_rows(some_fancy_name=df2)  # <-- name used as keyword

使用st.dataframe显示的Dataframes是交互式的。最终用户可以排序、调整大小、搜索并将数据复制到剪贴板。有关功能的概述,请阅读我们的Dataframes指南。

你可以通过Column configuration API配置st.dataframest.data_editor中列的显示和编辑行为。我们开发了这个API,让你可以在数据框和数据编辑器列中添加图片、图表和可点击的URL。此外,你可以使单个列可编辑,将列设置为分类并指定它们可以采用的选项,隐藏数据框的索引等等。

forum

还有问题吗?

我们的 论坛 充满了有用的信息和Streamlit专家。