StringIO和pandas read_csv

时间:2015-12-24 04:55:21

标签: python pandas

我正在尝试将StringIO和BytesIO与pandas混合在一起并努力解决一些基本问题。例如,我不能让下面的“输出”工作,而下面的“output2”确实有效。但是“输出”更接近我正在尝试的现实世界的例子。 “output2”中的方式来自一个老熊猫的例子,但对我来说并不是一个有用的方法。

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

1 个答案:

答案 0 :(得分:20)

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