簡體   English   中英

EmptyDataError:沒有要從關於 streamlit 的文件中解析的列

[英]EmptyDataError: No columns to parse from file about streamlit

我正在使用 streamlit 版本 v0.68,目前正在處理 CSV 文件以進行數據分析。

st.title('Report Analysis')
uploaded_file = st.file_uploader("Choose a file")
if uploaded_file is not None:
    data = pd.read_csv(uploaded_file, low_memory=False)
    st.write(data.shape)

首先它有效,但如果我在我的本地主機上重新運行程序,它會給我錯誤:

EmptyDataError: No columns to parse from file
Traceback:

File "D:\My Programs\Projects\ReportAnalysis\venv\lib\site-packages\streamlit\script_runner.py", line 324, in _run_script
    exec(code, module.__dict__)
File "D:\My Programs\Projects\ReportAnalysis\epl\app.py", line 9, in <module>
    data = pd.read_csv(uploaded_file, low_memory=False)
File "D:\My Programs\Projects\ReportAnalysis\venv\lib\site-packages\pandas\io\parsers.py", line 686, in read_csv
    return _read(filepath_or_buffer, kwds)
File "D:\My Programs\Projects\ReportAnalysis\venv\lib\site-packages\pandas\io\parsers.py", line 452, in _read
    parser = TextFileReader(fp_or_buf, **kwds)
File "D:\My Programs\Projects\ReportAnalysis\venv\lib\site-packages\pandas\io\parsers.py", line 946, in __init__
    self._make_engine(self.engine)
File "D:\My Programs\Projects\ReportAnalysis\venv\lib\site-packages\pandas\io\parsers.py", line 1178, in _make_engine
    self._engine = CParserWrapper(self.f, **self.options)
File "D:\My Programs\Projects\ReportAnalysis\venv\lib\site-packages\pandas\io\parsers.py", line 2008, in __init__
    self._reader = parsers.TextReader(src, **kwds)
File "pandas\_libs\parsers.pyx", line 540, in pandas._libs.parsers.TextReader.__cinit__

如何處理這個錯誤?

根據Streamlit 社區頁面的這篇文章,這是因為它們在應用程序第二次刷新時返回相同的緩沖區。 由於 pd.read_csv 耗盡了緩沖區,您第二次調用 read_csv 將不會返回任何行。

添加一個seek(0)來重置緩沖區對我有用。

例如

st.title('Report Analysis')
uploaded_file = st.file_uploader("Choose a file")
if uploaded_file is not None:
    uploaded_file.seek(0)
    data = pd.read_csv(uploaded_file, low_memory=False)
    st.write(data.shape)

此問題僅在新版本 v0.68.1 中出現。 作為一種變通方法,您始終可以使用以下命令返回舊版本,例如 0.66: pip install streamlit=0.66

這會幫助你。 適用於當前版本 0.69.1。

global train_upload
train_upload = st.file_uploader("Upload csv data", type=['csv'])
if (train_upload is not None):
    train_features = train_upload.read()
    train_features = str(train_features,'utf-8')
    train_features = StringIO(train_features)
    train_features = pd.read_csv(train_features)
    st.write(train_features)

對於 Streamlit 1.5.0,我嘗試了所有建議的解決方案,但都沒有奏效。 我找到的解決方法是將內容寫入一個臨時文件,然后從中讀取:

uploaded_file = st.file_uploader("Choose a file", type=["csv", "txt"])
content = StringIO(uploaded_file.getvalue().decode("utf-8")).read()
temp_filepath = f"/tmp/{uuid4()}"
with open(temp_filepath, "w") as f:
    f.write(content)
data = read_csv(temp_filepath)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM