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

Python Streamlit中解包DataFrame列表时数据结构变形问题

解决Streamlit多文件上传后DataFrame形状丢失的问题

问题根源

  1. 错误的解包方式:调用函数时使用*all_dfs = user_selection(...)是冗余且错误的写法。函数本身返回的是DataFrame列表,直接赋值即可,多余的*会破坏原有列表结构,导致后续索引访问时出现数据异常。
  2. 冗余的DataFrame清空操作:函数内的mydf = mydf.iloc[0:0]完全没必要,每次循环都会通过pd.read_csv生成新的DataFrame覆盖mydf,这行代码不仅无效,还可能引发不必要的混淆。

修正后的代码

上传函数代码

import streamlit as st
import pandas as pd

def user_selection(action):
    operation_mode = action
    with st.sidebar:
         if operation_mode == 'Multiple_files':
            uploaded_files = st.file_uploader("Choose required files", accept_multiple_files=True)
            all_df_list = []
            for uploaded_file in uploaded_files:
                # 直接读取CSV文件,无需提前清空DataFrame
                mydf = pd.read_csv(uploaded_file) 
                all_df_list.append(mydf)
            return all_df_list

调用代码

all_dfs = user_selection('Multiple_files')
# 增加非空判断,避免索引越界报错
if all_dfs:
    st.write(all_dfs[0])  # 此时DataFrame会保持原有形状与格式

额外优化建议

可以添加文件读取异常处理,提升用户体验:

import streamlit as st
import pandas as pd

def user_selection(action):
    operation_mode = action
    with st.sidebar:
         if operation_mode == 'Multiple_files':
            uploaded_files = st.file_uploader("Choose required files", accept_multiple_files=True)
            all_df_list = []
            for uploaded_file in uploaded_files:
                try:
                    mydf = pd.read_csv(uploaded_file) 
                    all_df_list.append(mydf)
                except Exception as e:
                    st.error(f"读取文件 {uploaded_file.name} 失败: {str(e)}")
            return all_df_list

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 18:35:12