2014-04-22 35 views
18

Ecco un esempio di quello che sto cercando di ottenere:Convertire Pandas dataframe stringa csv

ho:

import pandas as pd 
df = pd.DataFrame({'A' : [0, 1], 'B' : [1, 6]}) 

Il mio obiettivo è:

',A,B\n0,0,1\n1,1,6\n' 

posso realizzare questo con pigro e orribile:

df.to_csv('temp.csv') # create unnecessary file 
body = open('temp.csv').read() 

Anche i metodi to_string() sembrano molto promettenti; tuttavia, il meglio che posso venire in mente è questa:

body = df.to_string()[1:].replace(' ', ',') + '\n' 

Questo non crea un file inutile, ma sembra sciatto e forse non molto affidabile.

Mi manca una soluzione più semplice?

risposta

23
In [10]: df = pd.DataFrame({'A' : [0, 1], 'B' : [1, 6]}) 

In [11]: import StringIO 

In [12]: s = StringIO.StringIO() 

In [13]: df.to_csv(s) 

In [14]: s.getvalue() 
Out[14]: ',A,B\n0,0,1\n1,1,6\n' 
+3

-1 in quanto è un peso inutile (forse era da una versione precedente di panda) . Ma se non viene fornito alcun 'path_or_buf', il risultato viene restituito come stringa. Vedi la risposta qui sotto. –

+1

ovviamente era da 0.14 iirc – Jeff

33

Il modo più semplice è solo quello di non inserire qualsiasi nome di file, in questo caso una stringa viene restituita:

>>> df = pd.DataFrame({'A' : [0, 1], 'B' : [1, 6]}) 
>>> df.to_csv() 
',A,B\n0,0,1\n1,1,6\n' 
+3

Se si utilizza una serie, è necessario avvolgerla in un costruttore di dataframe: 'pandas.DataFrame (series) .to_csv()'. –