2014-04-22 16 views
18

Oto przykład tego, co staram się dostać:Konwersja pandy dataframe do csv ciąg

mam:

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

Moim celem jest:

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

można to osiągnąć z leniwym i okropnym:

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

Również metody są bardzo obiecujące; Jednak najlepszym mogę wymyślić to:

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

nie tworzyć niepotrzebnych plików, ale wydaje się rozlazły i chyba nie za bardzo niezawodny.

Czy brakuje prostszego rozwiązania?

Odpowiedz

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, ponieważ jest to przesada (może to było z poprzedniej wersji pandy) . Ale jeśli nie podano 'path_or_buf', wynik jest zwracany jako ciąg znaków. Zobacz odpowiedź poniżej. –

+1

oczywiście było to z 0.14 iirc – Jeff

33

Najprostszym sposobem jest po prostu nie do wprowadzania nazwy pliku, w tym przypadku ciąg jest zwracany:

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

Jeśli używasz serii, musisz zawinąć ją w konstruktorze ramek danych: 'pandas.DataFrame (series) .to_csv()'. –