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

Streamlit下拉菜单删除列后无法即时更新问题求助

解决Streamlit删除列后下拉菜单列列表不自动更新的问题

问题描述

通过Streamlit表单的下拉菜单实现CSV列删除功能时,删除操作可成功执行,但下拉菜单的列列表不会自动移除已删除的列,必须手动刷新页面才能更新。

原代码问题分析

原代码存在两个核心问题:

  1. 每次渲染表单时都会重新读取原始CSV文件到st.session_state.df,覆盖了删除列后的修改结果,导致下拉菜单始终显示初始列。
  2. 表单提交后没有触发页面重新渲染,无法实时更新下拉菜单的选项来源。

解决方案

调整代码逻辑,将CSV读取移至表单外仅初始化一次,删除列后触发页面重新渲染:

import streamlit as st
import pandas as pd

# 仅在首次加载时初始化session_state中的DataFrame
if 'df' not in st.session_state:
    st.session_state.df = pd.read_csv('./input.csv')

with st.form('Form1', clear_on_submit=True):
    # 基于当前session_state中的DataFrame生成下拉选项
    column_name = st.selectbox('Delete column:', st.session_state.df.columns.tolist())         
    delete_column = st.form_submit_button('Delete this column') 
                        
    if delete_column:                                        
        # 删除目标列并保存到CSV
        st.session_state.df.drop(column_name, axis=1, inplace=True)   
        st.session_state.df.to_csv('./input.csv', index=False)
        # 触发页面重新渲染,自动更新下拉菜单
        st.rerun()

关键改动说明

  • 初始化逻辑优化:把CSV读取放在表单外,仅在session_state中没有df时才读取原始文件,确保后续操作基于最新的DataFrame。
  • 实时渲染触发:调用st.rerun()(旧版本Streamlit使用st.experimental_rerun()),在删除列后强制页面重新渲染,下拉菜单会自动使用更新后的列列表。

内容的提问来源于stack exchange,提问作者Miguel Gonzalez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 02:05:20