EmptyDataError:关于streamlit 的文件中没有要解析的列

Swa*_*mar 4 python pandas 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)
Run Code Online (Sandbox Code Playgroud)

首先它可以工作,但是如果我在本地主机中重新运行该程序,则会出现错误:

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__
Run Code Online (Sandbox Code Playgroud)

如何处理这个错误?

Mik*_*ike 5

根据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)
Run Code Online (Sandbox Code Playgroud)


dro*_*ops 2

此问题仅出现在新版本v0.68.1上。作为解决方法,您始终可以使用以下命令返回到旧版本,例如 0.66: pip install streamlit=0.66