当前位置: 首页 > 面试题库 >

来自字符串或包数据的pandas.read_csv

卢出野
2023-03-14
问题内容

我要使用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

问题答案:

以下内容在3.3中为我工作:

>>> import numpy as np, pandas as pd
>>> import io, pkgutil
>>> wells = pkgutil.get_data('pymc.examples', 'data/wells.dat')
>>> type(wells)
<class 'bytes'>
>>> df = pd.read_csv(io.BytesIO(wells), encoding='utf8', sep=" ", index_col="id", dtype={"switch": np.int8})
>>> df.head()
    switch  arsenic       dist  assoc  educ
id                                         
1        1     2.36  16.826000      0     0
2        1     0.71  47.321999      0     0
3        0     2.07  20.966999      0    10
4        1     1.15  21.486000      0    12
5        1     1.10  40.874001      1    14

[5 rows x 5 columns]

注意:我必须手动将其放置wells.dat在该位置,所以我不能保证我已正确复制了它,并且没有终端空格,因为我删除了一些空格。但经过read_csv一个BytesIO对象,编码参数应该工作。(实际上,没有它,您可能会逃脱,但这是一个好习惯。
io.TextIOWrapper可能是另一种选择。)



 类似资料:
  • 问题内容: 我想基于我的字符串更改imageview src,我有这样的东西: 当然不行。如何以编程方式更改图像? 问题答案: 用: 注意:不要使用扩展名(例如,“。jpg”)。 示例:图像为“ abcd_36.jpg”

  • 一个api给我发送base64字符串,表示有一个图像。我有一个函数将这个字符串传输到blob存储。 当我用atob(b64Data)转换字符串时,出现以下错误: 如何用JavaScript解码?我尝试我的字符串与在线转换器(从base64到image)和工作良好。 谢谢

  • 本文向大家介绍javascript自动生成包含数字与字符的随机字符串,包括了javascript自动生成包含数字与字符的随机字符串的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了javascript自动生成包含数字与字符的随机字符串的方法。分享给大家供大家参考。具体如下: 这里主要用到Math.random() 和 Math.floor() 两个函数 Math.random()   --

  • 问题内容: 在python中,是否有内置的方法对字符串执行readline()?我有大量的数据,只想剥离前几行而对整个字符串不做split()。 假设的例子: 我希望这导致: 我知道编写一个可以做到这一点的类非常容易,但是我正在寻找内置的东西。 编辑:Python v2.7 问题答案: Python 2 您可以使用StringIO: 如果性能很重要,请确保使用cStringIO。 Python 3

  • 一个字符串一般有几个子串? 这里有一个链接[http://ocw.mit.edu/courses/electrice-engineering-and-computer-science/6-006-Introduction-to-algorithms-Fall-2011/lecture-videos/mit6_006F11_lec21.pdf]

  • 问题内容: 是否可以从Joda-Time DateTimeFormatter获取模式字符串? 问题答案: Joda Time无法提供从DateTimeFormatter获取原始模式的方法。原因之一可能是DateTimeFormatter不一定是从模式创建的。例如根本不使用模式。 但是,如果您始终使用模式,则可以包装该类以在构建时记录模式。这样,您以后可以使用简单的静态方法进行查找。例如: 然后,您