【问题标题】:StringIO and pandas read_csvStringIO 和熊猫 read_csv
【发布时间】:2016-03-30 13:59:53
【问题描述】:

我正在尝试将 StringIO 和 BytesIO 与 pandas 混合使用,并在一些基本的东西上苦苦挣扎。例如,我无法让下面的“输出”工作,而下面的“输出 2”可以工作。但是“输出”更接近我正在尝试做的真实世界的例子。 “output2”中的方式来自一个旧的 pandas 示例,但对我来说并不是一个真正有用的方式。

import io   # note for python 3 only
            # in python2 need to import StringIO

output = io.StringIO()
output.write('x,y\n')
output.write('1,2\n')

output2 = io.StringIO("""x,y
1,2
""")

它们在类型和内容方面似乎相同:

type(output) == type(output2)
Out[159]: True

output.getvalue() == output2.getvalue()
Out[160]: True

但不,不一样:

output == output2
Out[161]: False

更多的是我要解决的问题:

pd.read_csv(output)   # ValueError: No columns to parse from file
pd.read_csv(output2)  # works fine, same as reading from a file

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    io.StringIO 这里的行为就像一个文件——你写了它,现在文件指针指向末尾。当您在那之后尝试从中读取时,在您写入的点之后没有任何内容,因此:没有要解析的列。

    相反,就像使用普通文件一样,seek 开头,然后阅读:

    >>> output = io.StringIO()
    >>> output.write('x,y\n')
    4
    >>> output.write('1,2\n')
    4
    >>> output.seek(0)
    0
    >>> pd.read_csv(output)
       x  y
    0  1  2
    

    【讨论】:

    • 呃,实际上对于我不寻找的普通文件(至少明确表示),我只需输入“read_csv(file)”。但是谢谢,这行得通!
    • @JohnE:我的意思是“就像您在写入后尝试读取的普通文件一样”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-21
    • 2018-01-27
    • 2019-07-12
    • 2017-08-02
    • 1970-01-01
    • 2018-07-19
    • 2019-12-31
    相关资源
    最近更新 更多