StringIO y pandas read_csv

Estoy tratando de mezclar StringIO y BytesIO con pandas y luchando con algunas cosas básicas. Por ejemplo, no puedo hacer que la “salida” de abajo funcione, mientras que la “salida 2” de abajo funciona. Pero “salida” está más cerca del ejemplo del mundo real que estoy tratando de hacer. La forma en “output2” es de un viejo ejemplo de pandas, pero no es realmente una forma útil de hacerlo.

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 """) 

Parecen ser los mismos en términos de tipo y contenido:

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

Pero no, no es lo mismo.

 output == output2 Out[161]: False 

Más al punto del problema que estoy tratando de resolver:

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

io.StringIO aquí se comporta como un archivo: usted escribió en él y ahora el puntero del archivo apunta al final. Después de eso, cuando intenta leer en él, no hay nada después del punto que escribió, por lo tanto: no hay columnas para analizar.

En su lugar, al igual que lo haría con un archivo ordinario, seek el inicio y luego lea:

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