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

Streamlit添加示例文件触发TypeError错误,求解决方案

解决Streamlit示例文件加载的TypeError错误

核心问题是你把pandas DataFrame直接传给了st.sidebar.file_uploader()——这个组件的第一个参数要求是字符串类型的提示文本(比如"上传文件"),不是DataFrame对象,所以触发了类型不匹配的报错。

给你两种可行的解决思路:

方案1:直接使用读取的示例数据(推荐)

点击示例按钮后,已经拿到了完整的示例DataFrame,没必要再通过file_uploader组件传递,直接把这个数据用于后续逻辑即可:

if st.sidebar.button('Example'):
    # 读取本地示例文件
    mult = pd.read_csv(r"C:\Users\HP-PC\Desktop\python\demo2.csv")
    # 把示例数据赋值给后续处理用的变量,比如df = mult
    st.success("已加载示例数据")
    # 可选:展示示例数据预览
    st.dataframe(mult.head())

# 保留正常的用户文件上传入口
uploaded_file = st.sidebar.file_uploader("上传你的文件")
if uploaded_file is not None:
    df = pd.read_csv(uploaded_file)
    # 这里写处理上传文件的业务逻辑

方案2:模拟文件上传(适配现有依赖uploaded_file的逻辑)

如果你的代码逻辑必须依赖uploaded_file这个文件对象,可以把读取的DataFrame转成BytesIO格式,模拟用户上传的文件:

from io import StringIO

if st.sidebar.button('Example'):
    # 读取本地示例文件
    mult = pd.read_csv(r"C:\Users\HP-PC\Desktop\python\demo2.csv")
    # 将DataFrame转为csv格式的字符串缓冲区
    csv_buffer = StringIO()
    mult.to_csv(csv_buffer, index=False)
    csv_buffer.seek(0)  # 重置缓冲区指针到开头
    # 把缓冲区当作上传的文件对象
    uploaded_file = csv_buffer
    st.success("已加载示例数据")
else:
    # 正常的用户文件上传入口
    uploaded_file = st.sidebar.file_uploader("上传你的文件")

# 后续统一处理uploaded_file
if uploaded_file is not None:
    df = pd.read_csv(uploaded_file)
    # 这里写你的业务逻辑代码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 00:15:44