Streamlit复选框选中对应DataFrame合并功能代码修正求助
修复Streamlit复选框合并选中DataFrame的代码
原代码的核心问题
两段代码都没实现根据选中复选框筛选对应DataFrame的逻辑:
- 第一段代码:只要任意复选框选中就合并所有4个DataFrame,完全忽略具体选中的选项;字典里存的是DataFrame名字的字符串,而非实际对象,逻辑上没关联复选框状态和对应DataFrame。
- 第二段代码:只要有复选框选中就把字典里的所有字符串加入列表,没根据单个复选框的选中状态筛选;而且
pd.concat(i)传入的是字符串而非DataFrame对象,会直接报错,循环合并单个元素的逻辑也不成立。
修正后的代码实现
直接将复选框状态与对应DataFrame绑定,遍历收集选中的DataFrame后合并:
import streamlit as st import pandas as pd # 假设你已定义以下四个DataFrame dataframe_1 = pd.DataFrame({'col1': [1,2], 'col2': [3,4]}) dataframe_2 = pd.DataFrame({'col1': [5,6], 'col2': [7,8]}) dataframe_3 = pd.DataFrame({'col1': [9,10], 'col2': [11,12]}) dataframe_4 = pd.DataFrame({'col1': [13,14], 'col2': [15,16]}) # 侧边栏创建复选框 option_1 = st.sidebar.checkbox('dataframe1') option_2 = st.sidebar.checkbox('dataframe2') option_3 = st.sidebar.checkbox('dataframe3') option_4 = st.sidebar.checkbox('dataframe4') # 建立复选框状态与对应DataFrame的映射(直接存储对象,而非字符串) df_mapping = { option_1: dataframe_1, option_2: dataframe_2, option_3: dataframe_3, option_4: dataframe_4 } # 筛选出所有被选中的DataFrame selected_dfs = [df for selected, df in df_mapping.items() if selected] # 合并并展示结果 if selected_dfs: merged_df = pd.concat(selected_dfs, ignore_index=True) st.dataframe(merged_df) else: st.info("请至少选中一个DataFrame进行合并")
代码说明
- 用字典直接绑定复选框布尔状态和实际DataFrame对象,避免字符串引用的错误。
- 通过列表推导式精准筛选用户选中的DataFrame,确保只合并指定内容。
- 添加空选择时的提示信息,优化用户体验。
- 使用
ignore_index=True重置合并后DataFrame的索引,避免索引重复问题。
内容的提问来源于stack exchange,提问作者user14269252
相关产品推荐
相关产品推荐

