如何为Streamlit不同页面分配对应DataFrame?
解决方案
要实现每个系统的Selections/Results页面对应展示各自的DataFrame,你需要先将上传文件中的数据分配到对应系统的页面,再根据用户的选择调取展示。以下是修改后的代码:
import streamlit as st import pandas as pd # 初始化存储各系统数据的嵌套字典 system_data = { 'System 1': {'Selections': None, 'Results': None}, 'System 2': {'Selections': None, 'Results': None}, 'System 3': {'Selections': None, 'Results': None} } uploaded_file = st.file_uploader('Upload your File Here') if uploaded_file is not None: # 这里假设上传的是Excel文件,每个sheet对应"System X_Selections"或"System X_Results"格式 # 可根据实际文件结构调整读取逻辑 xls = pd.ExcelFile(uploaded_file) for sheet_name in xls.sheet_names: # 拆分sheet名称匹配系统和页面类型 system_part, page_part = sheet_name.split('_') if system_part in system_data and page_part in system_data[system_part]: system_data[system_part][page_part] = pd.read_excel(xls, sheet_name) st.success("文件数据加载完成!") st.title("Choose Your System") selected_section = st.sidebar.selectbox("Choose Your System:", sorted(system_data.keys())) selected_page = st.sidebar.radio("Choose Selection or Results:", sorted(system_data[selected_section].keys())) # 修正按钮参数:st.button仅支持单个标签文本 if st.button(f"Show {selected_page}"): target_df = system_data[selected_section][selected_page] if target_df is not None: st.write(f"展示 {selected_section}:{selected_page} 数据") st.dataframe(target_df) else: st.warning(f"{selected_section}的{selected_page}数据未加载,请先上传正确格式的文件!")
关键修改说明:
- 新增嵌套字典
system_data,专门存储每个系统下Selections和Results对应的DataFrame - 补充上传文件处理逻辑:读取文件后将数据匹配分配到对应系统的页面(示例用Excel sheet命名匹配,可根据实际数据结构调整,比如CSV按列区分等)
- 修正
st.button参数错误:原代码传入两个标签无效,改为根据当前选择动态生成按钮文本 - 点击按钮后,根据用户选择从
system_data中调取对应DataFrame展示,同时处理数据未加载的提示场景
内容的提问来源于stack exchange,提问作者liambh
相关产品推荐
相关产品推荐

