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
相关产品推荐
相关产品推荐

