如何使用Streamlit和Python按DataFrame字段数生成列并解决st.columns报错
问题原因
- 你调用
st.columns(ncol)时传入的ncol值不符合参数要求:只有当用户已经上传CSV文件、st.session_state.df被正确初始化后,st.session_state.df.shape[1]才会是正整数;如果页面刚加载、用户还未上传文件,st.session_state里没有df,或者df是空表,ncol就会是0、非整数类型甚至抛出属性错误,不符合st.columns的参数要求。 - 部分场景下
ncol可能会返回numpy数值类型,部分旧版本Streamlit对numpy数值类型的兼容性不好,也会触发这个报错。 - 你原有代码中表单部分缺少提交按钮,即使参数正常也无法正常触发提交逻辑。
修复方案
添加前置校验逻辑,确认数据存在后再渲染对应组件,同时统一转换参数类型避免兼容性问题,修复后代码如下:
import pandas as pd import streamlit as st # 前置校验:仅当session_state中存在有效df时才渲染新增记录功能 if "df" not in st.session_state or st.session_state.df.empty or st.session_state.df.shape[1] < 1: st.warning("请先上传有效CSV文件后再使用添加记录功能") else: num_new_rows = st.sidebar.number_input("Add Rows",1,50) # 强制转为Python标准int类型,规避numpy数值类型兼容性问题 ncol = int(st.session_state.df.shape[1]) with st.form(key='add_record_form',clear_on_submit= True): st.subheader("Add Record") cols = st.columns(ncol) rwdta = [ cols[i].text_input(st.session_state.df.columns[i]) for i in range(ncol) ] # 补充表单提交按钮 st.form_submit_button("提交新增记录")
内容的提问来源于stack exchange,提问作者DevLeb2022
相关产品推荐
相关产品推荐

