我有一个使用streamlit的Python脚本,它允许用户上传某些Excel文件,然后它会自动运行我的分析,然后我希望他们使用streamlit下载按钮下载xlsx的结果。不过,我知道如何让他们下载一个dataframe到csv,但不是一个xlsx文件使用streamlit下载按钮,这是我想做的。
这是我到目前为止所尝试的,这是在我的分析之后,我只是试图为用户创建下载按钮来下载存储在3个不同 Dataframe 中的结果:
Import pandas as pd
Import streamlit as st
# arrived_clean, booked_grouped, and arrived_grouped are all dataframes that I want to export to an excel file as results for the user to download.
def convert_df():
writer = pd.ExcelWriter('test_data.xlsx', engine='xlsxwriter')
arrived_clean.to_excel(writer, sheet_name='Cleaned', startrow=0, startcol=0, index=False)
booked_grouped.to_excel(writer, sheet_name='Output', startrow=0, startcol=0, index=False)
arrived_grouped.to_excel(writer, sheet_name='Output', startrow=0, startcol=20, index=False)
writer.save()
csv = convert_df()
st.download_button(
label="Download data",
data=csv,
file_name='test_data.xlsx',
mime='text/xlsx',
)
当我第一次在本地运行streamlit应用程序时,我得到了这个错误:
“名称错误:未定义名称'booked_grouped'”
因为我还没有上传任何文件,所以我得到了它。在我上传我的文件后,错误信息消失了,一切正常运行。然而,我得到这个错误,我看不到下载按钮来下载我的新 Dataframe :
RuntimeError:无效的二进制数据格式:<class 'NoneType'>行313,in马歇尔_file raise RuntimeError(“Invalid binary data format:%s”% type(data))
有人能告诉我我哪里做错了吗?这是我最后一个要解决的问题。
2条答案
按热度按时间92dk7w1h1#
Pluviophile的答案是正确的,但是你应该在pd.ExcelWriter中使用
output
而不是file_name
:8xiog9wr2#
当我第一次在本地运行streamlit应用程序时,我得到了这个错误:
“名称错误:未定义名称'booked_grouped'”
假设你的代码
您可以使用以下方法跳过错误
下载excel
将所有
dataframes
转换为一个Excel