You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Streamlit复选框选中对应DataFrame合并功能代码修正求助

修复Streamlit复选框合并选中DataFrame的代码

原代码的核心问题

两段代码都没实现根据选中复选框筛选对应DataFrame的逻辑:

  1. 第一段代码:只要任意复选框选中就合并所有4个DataFrame,完全忽略具体选中的选项;字典里存的是DataFrame名字的字符串,而非实际对象,逻辑上没关联复选框状态和对应DataFrame。
  2. 第二段代码:只要有复选框选中就把字典里的所有字符串加入列表,没根据单个复选框的选中状态筛选;而且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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 22:48:18