Python 熊猫从拜特西奥那里读到

Python 熊猫从拜特西奥那里读到,python,pandas,file,csv,bytesio,Python,Pandas,File,Csv,Bytesio,我有一个类似BytesIO文件的对象,包含一个CSV。 我想把它读入一个数据帧,而不在其间写入磁盘 MWE 在我的用例中,我将文件直接下载到BytesIO中。 对于这个MWE,我将在磁盘上有一个文件,将它读入BytesIO,然后读入Pandas。 磁盘步骤只是制作一个MWE file.csv a,b 1,2 3,4 脚本: import pandas as pd from io import BytesIO bio = BytesIO() with open('file.csv', 'rb')

我有一个类似BytesIO文件的对象,包含一个CSV。 我想把它读入一个数据帧,而不在其间写入磁盘

MWE 在我的用例中,我将文件直接下载到BytesIO中。 对于这个MWE,我将在磁盘上有一个文件,将它读入BytesIO,然后读入Pandas。 磁盘步骤只是制作一个MWE

file.csv

a,b
1,2
3,4
脚本:

import pandas as pd
from io import BytesIO
bio = BytesIO()
with open('file.csv', 'rb') as f:
   bio.write(f.read())

# now we have a BytesIO with a CSV
df = pd.read_csv(bio)
结果:

Traceback (most recent call last):
  File "pandas-io.py", line 8, in <module>
    df = pd.read_csv(bio)
  File "/home/ec2-user/.local/lib/python3.6/site-packages/pandas/io/parsers.py", line 685, in parser_f
    return _read(filepath_or_buffer, kwds)
  File "/home/ec2-user/.local/lib/python3.6/site-packages/pandas/io/parsers.py", line 457, in _read
    parser = TextFileReader(fp_or_buf, **kwds)
  File "/home/ec2-user/.local/lib/python3.6/site-packages/pandas/io/parsers.py", line 895, in __init__
    self._make_engine(self.engine)
  File "/home/ec2-user/.local/lib/python3.6/site-packages/pandas/io/parsers.py", line 1135, in _make_engine
    self._engine = CParserWrapper(self.f, **self.options)
  File "/home/ec2-user/.local/lib/python3.6/site-packages/pandas/io/parsers.py", line 1917, in __init__
    self._reader = parsers.TextReader(src, **kwds)
  File "pandas/_libs/parsers.pyx", line 545, in pandas._libs.parsers.TextReader.__cinit__
pandas.errors.EmptyDataError: No columns to parse from file
回溯(最近一次呼叫最后一次):
文件“pandas io.py”,第8行,在
df=pd.read\U csv(生物)
parser\u f中的文件“/home/ec2 user/.local/lib/python3.6/site packages/pandas/io/parsers.py”,第685行
返回读取(文件路径或缓冲区,kwds)
文件“/home/ec2 user/.local/lib/python3.6/site packages/pandas/io/parsers.py”,第457行,已读
parser=TextFileReader(fp_或_buf,**kwds)
文件“/home/ec2 user/.local/lib/python3.6/site packages/pandas/io/parsers.py”,第895行,在__
自制发动机(自制发动机)
文件“/home/ec2 user/.local/lib/python3.6/site-packages/pandas/io/parsers.py”,第1135行,在制作引擎中
self.\u engine=CParserWrapper(self.f,**self.options)
文件“/home/ec2 user/.local/lib/python3.6/site packages/pandas/io/parsers.py”,第1917行,在__
self.\u reader=parsers.TextReader(src,**kwds)
文件“pandas/_libs/parsers.pyx”,第545行,在pandas._libs.parsers.TextReader.\uu\cinit中__
pandas.errors.EmptyDataError:没有要从文件中分析的列

请注意,这听起来与的标题类似,但错误消息不同,并且该帖子存在X-Y问题。

错误表示文件为空

这是因为在写入
BytesIO
对象后,文件指针位于文件的末尾,准备写入更多内容。因此,当Pandas尝试读取它时,它会在写入的最后一个字节之后开始读取

因此,您需要将指针移回起点,以便熊猫阅读

bio.seek(0)
df = pd.read_csv(bio)