Get dataframe row-selections from users (streamlit<1.35.0)
在Streamlit版本1.35.0中引入数据框选择之前,st.dataframe和st.data_editor并不原生支持将用户选择的行传递给Python后端。如果您希望处理数据框的行(或列)选择,我们建议升级到streamlit>=1.35.0。有关更新的教程,请参阅从用户获取数据框行选择。
然而,如果你需要为旧版本的Streamlit找到一个变通方法,你可以通过使用st.data_editor向你的数据框添加一个额外的复选框列来有效地获取行选择。使用这个额外的列来收集用户的选择。
Example
在下面的示例中,我们定义了一个函数,该函数接受一个数据框并返回用户选择的行。在函数内部,为了防止数据框被修改,我们复制了数据框。在将复制的数据传递给st.data_editor之前,我们向复制的数据框中插入了一个临时的“选择”列。我们禁用了所有其他列的编辑功能,但如果你愿意,也可以使它们可编辑。在过滤数据框并删除临时列之后,我们的函数返回选定的行。
import streamlit as st
import numpy as np
import pandas as pd
df = pd.DataFrame(
{
"Animal": ["Lion", "Elephant", "Giraffe", "Monkey", "Zebra"],
"Habitat": ["Savanna", "Forest", "Savanna", "Forest", "Savanna"],
"Lifespan (years)": [15, 60, 25, 20, 25],
"Average weight (kg)": [190, 5000, 800, 10, 350],
}
)
def dataframe_with_selections(df):
df_with_selections = df.copy()
df_with_selections.insert(0, "Select", False)
# Get dataframe row-selections from user with st.data_editor
edited_df = st.data_editor(
df_with_selections,
hide_index=True,
column_config={"Select": st.column_config.CheckboxColumn(required=True)},
disabled=df.columns,
)
# Filter the dataframe using the temporary column, then drop the column
selected_rows = edited_df[edited_df.Select]
return selected_rows.drop('Select', axis=1)
selection = dataframe_with_selections(df)
st.write("Your selection:")
st.write(selection)
还有问题吗?
我们的 论坛 充满了有用的信息和Streamlit专家。