Streamlit multiselect未选内容时无法显示全量数据的解决方法
解决Streamlit Multiselect未选择时无数据的问题
问题出在当前的过滤逻辑上:当options和options2都为空列表时,query语句中的CODE in @options or TYPE in @options2会返回False,导致没有任何数据被筛选出来。
你可以通过以下两种方式修改代码实现需求:
方式一:直接修改查询条件
通过在查询语句中添加“两个多选框都未选择时返回全部数据”的逻辑:
code_= df_temp.CODE.unique().tolist() type_ = df_temp.TYPE.unique().tolist() options_col, options2_col = st.columns([0.1, 0.1]) options = options_col.multiselect('Select Code', code_ ) options2 = options2_col.multiselect('Select Type', type_ ) # 都未选择时返回全部数据,否则执行原过滤逻辑 df_filtered = time_filtered.query('(@options == [] and @options2 == []) or (CODE in @options or TYPE in @options2)')
方式二:使用条件判断拆分逻辑
通过Python的条件判断直接控制返回结果,逻辑更直观:
code_= df_temp.CODE.unique().tolist() type_ = df_temp.TYPE.unique().tolist() options_col, options2_col = st.columns([0.1, 0.1]) options = options_col.multiselect('Select Code', code_ ) options2 = options2_col.multiselect('Select Type', type_ ) if not options and not options2: # 无选择时直接返回原始数据 df_filtered = time_filtered else: # 有选择时执行原过滤逻辑 df_filtered = time_filtered.query('CODE in @options or TYPE in @options2')
内容的提问来源于stack exchange,提问作者user14269252
相关产品推荐
相关产品推荐

