2015-12-24 3 views
3

Я пытаюсь смешать StringIO и BytesIO с пандами и бороться с некоторыми основными вещами. Например, я не могу получить «выход» ниже для работы, тогда как «output2» ниже работает. Но «выход» ближе к реальному примеру, который я пытаюсь сделать. Путь в «output2» от старого примера pandas, но не очень полезный способ сделать это.StringIO и pandas read_csv

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 

Больше к точке задачи I» m пытается решить:

ответ

9

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 
+0

Ну, на самом деле с помощью обычного файла я не стремлюсь (в явном виде, по крайней мере), я просто введите «read_csv (файл)». Но спасибо, что работает! – JohnE

+0

@JohnE: Я имею в виду «как вы с обычным файлом, который вы пытаетесь прочитать после того, как вы написали». – DSM

+0

ОК, спасибо. Я попытался закрыть его, но это не помогло. – JohnE