如何将streamlit输出数据框下载为excel文件

问题描述 投票:0回答:2

我想知道是否有任何方法可以使用streamlit按钮将streamlit的输出数据帧下载为Excel文件?

python excel dataframe button streamlit
2个回答
6
投票

我建议您编辑您的问题以包含一个最小的可重现示例,以便人们更容易理解您的问题并为您提供帮助。

如果我理解正确的话,这就是答案。基本上它提供了 2 种方法来下载数据

df
作为 csv 或 xlsx。
重要:您需要安装
xlsxwriter
软件包才能正常工作。

import streamlit as st
import pandas as pd
import io

# buffer to use for excel writer
buffer = io.BytesIO()

data = {
    "calories": [420, 380, 390],
    "duration": [50, 40, 45],
    "random1": [5, 12, 1],
    "random2": [230, 23, 1]
}
df = pd.DataFrame(data)

@st.cache
def convert_to_csv(df):
    # IMPORTANT: Cache the conversion to prevent computation on every rerun
    return df.to_csv(index=False).encode('utf-8')

csv = convert_to_csv(df)

# display the dataframe on streamlit app
st.write(df)

# download button 1 to download dataframe as csv
download1 = st.download_button(
    label="Download data as CSV",
    data=csv,
    file_name='large_df.csv',
    mime='text/csv'
)

# download button 2 to download dataframe as xlsx
with pd.ExcelWriter(buffer, engine='xlsxwriter') as writer:
    # Write each dataframe to a different worksheet.
    df.to_excel(writer, sheet_name='Sheet1', index=False)

    download2 = st.download_button(
        label="Download data as Excel",
        data=buffer,
        file_name='large_df.xlsx',
        mime='application/vnd.ms-excel'
    )

0
投票

edesz 提供的解决方案进行小改进: 仅在单击准备按钮并添加所需的内容后才准备 Excel

writer.close()

def excel_download_buttons(df: pd.DataFrame, file_name: str = "export.xlsx") -> None:
"""Show prepare data and download buttons."""
if st.button("Click to prepare download"):
    buffer = io.BytesIO()
     with pd.ExcelWriter(buffer, engine="xlsxwriter") as writer:
        df.to_excel(writer, sheet_name="Sheet1", index=False)
        writer.close()
        st.download_button(
            label="Download data as Excel",
            data=buffer,
            file_name=file_name,
            mime="application/vnd.ms-excel",
        )
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.