多选/选择框在第一次选择后不等待 - Streamlit
Posted
技术标签:
【中文标题】多选/选择框在第一次选择后不等待 - Streamlit【英文标题】:Multiselect/Selectbox doesn’t wait after first selection - Streamlit 【发布时间】:2021-08-16 05:24:07 【问题描述】:全部,
我之前成功地使用了多选,但是当我尝试这个我作为 POC 尝试的特定示例时,行为非常奇怪。本质上,我想做的是使用多选让应用程序在中间步骤等待用户输入。但是,多选不会等待我选择我想要选择的输入,只要我选择了一个东西,它就会运行,甚至不能正确执行。有人可以指导我做错什么吗?我使用的是 0.82 版本。
我也使用 selectbox 进行了相同的测试,并且看到了相同的行为。
所以,这就是我所拥有的:
import streamlit as st
import pandas as pd
def basic_skeleton() -> tuple:
"""Prepare the basic UI for the app"""
st.sidebar.title('User Inputs')
beta_expander = st.sidebar.beta_expander("Upload csv")
with beta_expander:
user_file_path = st.sidebar.file_uploader(
label='Random Data',
type='csv'
)
return user_file_path
def get_filtered_dataframe(df) -> pd.DataFrame:
columns_list = df.columns
with st.form(key='Selecting Columns'):
columns_to_aggregate = st.selectbox(
label='Select columns to summarize',
options=columns_list
)
submit_button = st.form_submit_button(label='Submit')
if submit_button:
df1 = df[columns_to_aggregate]
return df1
def main():
"""Central wrapper to control the UI"""
# add title
st.header('Streamlit Testing')
# add high level site inputs
user_file_path = basic_skeleton()
load = st.sidebar.button(label='Load Data')
if load:
df = pd.read_csv(user_file_path)
st.dataframe(df)
clean_df = get_filtered_dataframe(df)
run = st.button("Aggregate Selected columns")
if run:
result = clean_df.describe(include='all')
st.dataframe(result)
main()
【问题讨论】:
【参考方案1】:streamlit 社区的一位用户帮助回答了这个问题。我想确定一下,这里提供了答案,所以这里也提供了任何来寻找的人:
import streamlit as st
import pandas as pd
def basic_skeleton() -> tuple:
"""Prepare the basic UI for the app"""
st.sidebar.title('User Inputs')
beta_expander = st.sidebar.beta_expander("Upload csv")
with beta_expander:
user_file_path = st.sidebar.file_uploader(
label='Random Data',
type='csv'
)
return user_file_path
def get_filtered_dataframe(df):
columns_list = df.columns
with st.form(key='Selecting Columns'):
columns_to_aggregate = st.multiselect(
label='Select columns to summarize',
options=columns_list
)
submit_button = st.form_submit_button(label='Submit')
if submit_button:
df1 = df[columns_to_aggregate]
return df1
def main():
"""Central wrapper to control the UI"""
# add title
st.header('Streamlit Testing')
# add high level site inputs
user_file_path = basic_skeleton()
if user_file_path:
load = st.sidebar.checkbox(label='Load Data')
if load:
df = pd.read_csv(user_file_path)
st.dataframe(df)
clean_df = get_filtered_dataframe(df)
if clean_df is not None:
result = clean_df.describe()
st.dataframe(result)
main()
【讨论】:
您能否解释一下避免这种行为所需的代码更改以上是关于多选/选择框在第一次选择后不等待 - Streamlit的主要内容,如果未能解决你的问题,请参考以下文章