无法从 streamlit 下载 csv 格式
Unable to download from streamlit in csv format
我正在尝试以 csv 文件的形式从 streamlit 下载数据框。但是,它无法以 CSV 格式下载,而是以 object.I 格式下载,必须手动转换为 csv 才能满足我的要求 output.Below 是示例代码:
import pandas as pd
import base64
import streamlit as st
X = pd.DataFrame({'A':["bad", "good", "better", "good", "better", "good", "better", "good", "better", "bad", "good", "better", "good", "better", "bad", "good", "better", "bad", "good", "better", "good", "better", "bad"],
'B': [3803, 1062, 4862, 6356, 2171, 532, 6982, 891, 1961, 3631, 1626, 1507, 3069, 2793, 721, 4288, 1601, 1439, 5807, 5054, 2411, 2913, 3505],
'C': [1318, 2537, 2315, 4967, 4483, 1433, 529, 1262, 1583, 506, 2576, 289, 3740, 3087, 309, 3493, 1862, 2666, 1231, 1828, 4144, 3503, 3102]
})
if X is not None:
csv_exp = X.to_csv(index=False)
b64 = base64.b64encode(csv_exp.encode()).decode() # some strings <-> bytes conversions necessary here
href = f'<a href="data:file/csv;base64,{b64}">Download Predicted File</a>(right-click and save as csv**)'
st.markdown(href, unsafe_allow_html=True)
我运行 你的代码。当我单击 link 时,我看到它另存为 download
.
我在保存过程中将其更改为download.csv
,似乎可以使用。
当我打开 download
它没有在我的 csv 查看器中打开。
当我打开 download.csv
时,它会在我的 csv 查看器中打开。
当我 运行 cat download
和 cat download.csv
时,输出是相同的并且是 csv 格式。所以数据是一样的。
看来你想要的是一种创建默认文件名的方法,其中包含 .csv
。
这是执行此操作的 csv 下载按钮的修改版本。
def st_pandas_to_csv_download_link(_df:pd.DataFrame, file_name:str = "dataframe.csv"):
csv_exp = _df.to_csv(index=False)
b64 = base64.b64encode(csv_exp.encode()).decode() # some strings <-> bytes conversions necessary here
href = f'<a href="data:file/csv;base64,{b64}" download="{file_name}" > Download Dataframe (CSV) </a>'
st.markdown(href, unsafe_allow_html=True)
st_pandas_to_csv_download_link(X, file_name = "my_file.csv")
在 href =
行上进行了更改。我已将 download=
添加到 link 以定义下载的文件名。我从this stack overflow thread
扫了一眼
我正在尝试以 csv 文件的形式从 streamlit 下载数据框。但是,它无法以 CSV 格式下载,而是以 object.I 格式下载,必须手动转换为 csv 才能满足我的要求 output.Below 是示例代码:
import pandas as pd
import base64
import streamlit as st
X = pd.DataFrame({'A':["bad", "good", "better", "good", "better", "good", "better", "good", "better", "bad", "good", "better", "good", "better", "bad", "good", "better", "bad", "good", "better", "good", "better", "bad"],
'B': [3803, 1062, 4862, 6356, 2171, 532, 6982, 891, 1961, 3631, 1626, 1507, 3069, 2793, 721, 4288, 1601, 1439, 5807, 5054, 2411, 2913, 3505],
'C': [1318, 2537, 2315, 4967, 4483, 1433, 529, 1262, 1583, 506, 2576, 289, 3740, 3087, 309, 3493, 1862, 2666, 1231, 1828, 4144, 3503, 3102]
})
if X is not None:
csv_exp = X.to_csv(index=False)
b64 = base64.b64encode(csv_exp.encode()).decode() # some strings <-> bytes conversions necessary here
href = f'<a href="data:file/csv;base64,{b64}">Download Predicted File</a>(right-click and save as csv**)'
st.markdown(href, unsafe_allow_html=True)
我运行 你的代码。当我单击 link 时,我看到它另存为 download
.
我在保存过程中将其更改为download.csv
,似乎可以使用。
当我打开 download
它没有在我的 csv 查看器中打开。
当我打开 download.csv
时,它会在我的 csv 查看器中打开。
当我 运行 cat download
和 cat download.csv
时,输出是相同的并且是 csv 格式。所以数据是一样的。
看来你想要的是一种创建默认文件名的方法,其中包含 .csv
。
这是执行此操作的 csv 下载按钮的修改版本。
def st_pandas_to_csv_download_link(_df:pd.DataFrame, file_name:str = "dataframe.csv"):
csv_exp = _df.to_csv(index=False)
b64 = base64.b64encode(csv_exp.encode()).decode() # some strings <-> bytes conversions necessary here
href = f'<a href="data:file/csv;base64,{b64}" download="{file_name}" > Download Dataframe (CSV) </a>'
st.markdown(href, unsafe_allow_html=True)
st_pandas_to_csv_download_link(X, file_name = "my_file.csv")
在 href =
行上进行了更改。我已将 download=
添加到 link 以定义下载的文件名。我从this stack overflow thread