我想使用read_csv读取一个包中的一些csv文本数据。
from pkgutil import get_data
from StringIO import StringIO
data = read_csv(StringIO(get_data('package.subpackage', 'path/to/data.csv')))
但是StringIO.StringIO在Python 3中消失了,io.StringIO只接受Unicode,有没有简单的方法可以做到这一点?
编辑:以下操作似乎不起作用
import pandas as pd
import pkgutil
from io import StringIO
def get_data_file(pkg, path):
f = StringIO()
contents = unicode(pkgutil.get_data('pymc.examples', 'data/wells.dat'))
f.write(contents)
return f
wells = get_data_file('pymc.examples', 'data/wells.dat')
data = pd.read_csv(wells, delimiter=' ', index_col='id',
dtype={'switch': np.int8})
失败于
File "/usr/local/lib/python2.7/dist-packages/pandas/io/parsers.py", line 401, in parser_f
return _read(filepath_or_buffer, kwds)
File "/usr/local/lib/python2.7/dist-packages/pandas/io/parsers.py", line 209, in _read
parser = TextFileReader(filepath_or_buffer, **kwds)
File "/usr/local/lib/python2.7/dist-packages/pandas/io/parsers.py", line 509, in __init__
self._make_engine(self.engine)
File "/usr/local/lib/python2.7/dist-packages/pandas/io/parsers.py", line 611, in _make_engine
self._engine = CParserWrapper(self.f, **self.options)
File "/usr/local/lib/python2.7/dist-packages/pandas/io/parsers.py", line 893, in __init__
self._reader = _parser.TextReader(src, **kwds)
File "parser.pyx", line 441, in pandas._parser.TextReader.__cinit__ (pandas/src/parser.c:3940)
File "parser.pyx", line 551, in pandas._parser.TextReader._get_header (pandas/src/parser.c:5096)
pandas._parser.CParserError: Passed header=0 but only 0 lines in file
2条答案
按热度按时间55ooxyrt1#
要将
string
传递给Pandasread_csv()
,可以使用io.StringIO
,例如:kse8i1jr2#
以下是我在3.3中使用的方法:
注意:我不得不手动将
wells.dat
放到那个位置,所以我不能保证我复制的正确,也不能保证结尾没有空格,因为我删除了一些。但是给read_csv
传递一个BytesIO
对象和一个编码参数应该可以。(实际上,你可能不用它,但这是一个好习惯。io.TextIOWrapper
可能是另一种选择。)