Get dataframe row-selections from users (streamlit<1.35.0)

在Streamlit版本1.35.0中引入数据框选择之前,st.dataframest.data_editor并不原生支持将用户选择的行传递给Python后端。如果您希望处理数据框的行(或列)选择,我们建议升级到streamlit>=1.35.0。有关更新的教程,请参阅从用户获取数据框行选择

然而,如果你需要为旧版本的Streamlit找到一个变通方法,你可以通过使用st.data_editor向你的数据框添加一个额外的复选框列来有效地获取行选择。使用这个额外的列来收集用户的选择。

在下面的示例中,我们定义了一个函数,该函数接受一个数据框并返回用户选择的行。在函数内部,为了防止数据框被修改,我们复制了数据框。在将复制的数据传递给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)
forum

还有问题吗?

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