提示
了解更多信息,请参阅我们的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:
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) | 数据框的期望宽度,以像素表示。如果 width 是 None(默认值),Streamlit 会将数据框宽度设置为适应其 内容,直到父容器的宽度。如果 width 大于 父容器的宽度,Streamlit 会将数据框宽度设置为与父容器的宽度匹配。 |
height (int or None) | 数据框的期望高度,以像素表示。如果height是None(默认值),Streamlit会将高度设置为最多显示十行。当高度无法容纳所有行时,数据框元素内的垂直滚动将被启用。 |
use_container_width (bool) | 是否使用父容器的宽度覆盖width。如果use_container_width为False(默认),Streamlit会根据width设置数据框的宽度。如果use_container_width为True,Streamlit会将数据框的宽度设置为与父容器的宽度相匹配。 |
hide_index (bool or None) | 是否隐藏索引列。如果 hide_index 是 None (默认值),索引列的可见性将根据数据自动确定。 |
column_order (Iterable of str or None) | 要显示的有序列的列。如果 column_order 是 None(默认),Streamlit 会按照基础数据结构中的顺序显示所有列。如果 column_order 是一个列表,指定的列将按照它们在列表中出现的顺序显示。列可以在列表中省略或重复。 例如,column_order=("col2", "col1") 将首先显示 "col2",然后是 "col1",并隐藏所有其他非索引列。 |
column_config (dict or None) | 配置以自定义列的显示方式。如果 column_config 是 None(默认),则根据每列的基础数据类型来设置列的样式。 列配置可以修改列名、可见性、类型、宽度或格式等。column_config 必须是一个字典,其中每个键是列名,关联的值是以下之一:
要配置索引列,请使用 _index 作为列名。 |
key (str) | 一个可选的字符串,用于给这个元素一个稳定的身份。如果 key 是 None(默认值),这个元素的身份将基于其他参数的值来确定。 此外,如果启用了选择并且提供了 key,Streamlit 将在会话状态中注册该键以存储选择状态。选择状态是只读的。 |
on_select ("ignore" 或 "rerun" 或 callable) | 数据框应如何响应用户选择事件。这控制数据框是否表现得像一个输入小部件。on_select 可以是以下之一:
|
selection_mode ("single-row", "multi-row", "single-column", "multi-column", 或这些的 Iterable) | 当使用 on_select 启用选择时,Streamlit 应允许的选择类型。这可以是以下之一:
当启用列选择时,列排序将被禁用。 |
返回 | |
(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_config、hide_index或column_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)
Dataframe selections
属性 | |
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
Interactivity
使用st.dataframe
显示的Dataframes是交互式的。最终用户可以排序、调整大小、搜索并将数据复制到剪贴板。有关功能的概述,请阅读我们的Dataframes指南。
Configuring columns
你可以通过Column configuration API配置st.dataframe
和st.data_editor
中列的显示和编辑行为。我们开发了这个API,让你可以在数据框和数据编辑器列中添加图片、图表和可点击的URL。此外,你可以使单个列可编辑,将列设置为分类并指定它们可以采用的选项,隐藏数据框的索引等等。
还有问题吗?
我们的 论坛 充满了有用的信息和Streamlit专家。