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

