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

在Streamlit中无法拼接以user_开头的DataFrames问题求助

在Streamlit中拼接以user_开头的DataFrames报错的解决方法

错误原因

你在Streamlit代码里使用eval(st.session_state.name)的方式完全错误:

  • st.session_state是Streamlit的类字典状态容器,你存入的user_df1、user_df2是该容器的键值对,并非全局/局部命名空间中的变量。
  • eval()会在全局/局部作用域查找变量名,自然找不到存在st.session_state里的DataFrame,因此触发报错。
  • 普通Python环境中能运行,是因为你的DataFrame直接定义在全局作用域,eval()可以正常找到对应变量。

修正方案

直接通过st.session_state[key]的方式获取对应DataFrame,完全不需要eval()。

完整修正代码

import streamlit as st
import pandas as pd

st.set_page_config(page_title="Science",
                    layout='wide',
                    initial_sidebar_state="expanded")


# 示例DataFrames
st.session_state.user_df1 = pd.DataFrame({'A': [1, 2], 'B': [3, 4]})
st.session_state.user_df2 = pd.DataFrame({'A': [5, 6], 'B': [7, 8]})
st.session_state.df3 = pd.DataFrame({'A': [1, 2], 'B': [3, 4]})


# 筛选所有以user_开头的键名
st.session_state.users_list = [name for name in st.session_state if name.startswith('user_')]

st.write(st.session_state.users_list)

# 直接从session_state中提取DataFrames并拼接
user_dfs = [st.session_state[name] for name in st.session_state.users_list]
st.session_state.df_final = pd.concat(user_dfs, ignore_index=True)

st.table(st.session_state.df_final)

额外说明

这种写法不仅解决了报错问题,还规避了eval()带来的安全风险(执行字符串代码可能存在注入隐患),同时更贴合Streamlit的状态管理设计逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 09:23:20