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

如何使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 09:15:02