pandas的pd.read_table是否支持io.BytesIO和StringIO?

问题描述 投票:1回答:1

我有一个io.BytesIO对象,iostream,这是一个从磁盘读取的be2文件,我打算将列标题附加到表/ iostream

f = io.BytesIO()
f.write(b'A,B,C,D\n')
f.write(iostream.getvalue())

pd.read_table(f, sep=',', index_col=False, error_bad_lines=False, encoding='utf-8', dtype=type_map)

但它给了我一个错误,

pandas.errors.EmptyDataError: No columns to parse from file

我想知道如何解决这个问题。

也试过了

f = io.StringIO()
f.write('A,B,C,D\n')    
f.write(iostream.getvalue().decode())

pd.read_table(f, sep=',', index_col=False, error_bad_lines=False, encoding='utf-8', dtype=type_map)

得到了错误

pandas.errors.ParserError: Error tokenizing data. C error: Calling read(nbytes) on source failed. Try engine='python'.
python-3.x pandas bytesio
1个回答
1
投票

我设法重现你的错误。您第一次尝试时遇到的问题是,在调用'pd.read_table'时,您正处于流'f'的末尾,因为您刚刚编写了所有内容。 'pd.read_table'在内部调用read(),它从您当前的位置读取。所以它返回一个空字符串。这是错误的原因:

 pandas.errors.EmptyDataError: No columns to parse from file

解决方案很简单。你只需要用'seek'再次移动到流的开头。这段代码对我有用:

f = io.BytesIO()
f.write(b'A,B,C,D\n')
f.write(iostream.getvalue())
f.seek(0)

pd.read_table(f, sep=',', index_col=False, error_bad_lines=False, encoding='utf-8')
© www.soinside.com 2019 - 2024. All rights reserved.