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

Streamlit部署Prophet时序预测模型时遇TypeError错误求助

Streamlit部署Prophet预测模型时触发TypeError错误

错误详情

TypeError: 'UploadedFile' object is not subscriptable

使用的依赖库

import streamlit as st
import pandas as pd
import numpy as np
from prophet import Prophet
from prophet.diagnostics import performance_metrics
from prophet.diagnostics import cross_validation
from prophet.plot import plot_cross_validation_metric
import base64

问题代码片段

st.info(f"Upload a .csv file first")

if df is not None:
    df.columns = ['ds', 'y']
    df['ds'] = pd.to_datetime(df['ds'])
    data = pd.read_csv(df)
    
    st.write(data)
    max_date = data['ds'].max()

测试用CSV文件示例

Datetime,AEP_MW
2004-12-31 01:00:00,13478.0
2004-12-31 02:00:00,12865.0
2004-12-31 03:00:00,12577.0
2004-12-31 04:00:00,12517.0
2004-12-31 05:00:00,12670.0

问题原因与修复方案

问题根源

Streamlit上传的文件是UploadedFile类型对象,不是Pandas DataFrame。直接对这个文件对象执行列名修改、下标访问(df['ds'])操作,必然触发“不可下标访问”的错误;同时pd.read_csv()的调用顺序错误——应该先读取文件生成DataFrame,再做列名修改。

修复后的完整代码

st.info("Upload a .csv file first")
# 获取用户上传的CSV文件
uploaded_file = st.file_uploader("选择CSV文件", type="csv")

if uploaded_file is not None:
    # 先将上传文件读取为DataFrame
    data = pd.read_csv(uploaded_file)
    # 重命名列以适配Prophet要求的ds和y
    data.columns = ['ds', 'y']
    # 将ds列转换为日期时间格式
    data['ds'] = pd.to_datetime(data['ds'])
    
    st.write(data)
    max_date = data['ds'].max()

核心修改点

  • 先通过st.file_uploader获取上传文件对象,再用pd.read_csv()将其转为DataFrame
  • 所有列操作(重命名、格式转换)都要在生成DataFrame之后执行,不能直接操作UploadedFile对象
  • 修正代码逻辑顺序:读取文件 → 处理列 → 后续操作

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 09:45:25