Convert Pandas dataframe to csv string
Asked Answered
C

2

97

Here is an example of what I am trying to get:

I have:

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

My goal is:

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

I can achieve this with lazy and horrible:

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

Also to_string() methods looks very promising; however, the best I can come up with is this:

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

This does not create an unnecessary file, but seems sloppy and perhaps not very reliable.

Am I missing a simpler solution?

Cloutier answered 22/4, 2014 at 22:41 Comment(0)
R
53
In [10]: df = pd.DataFrame({'A' : [0, 1], 'B' : [1, 6]})

In [11]: import io

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

In [13]: df.to_csv(s)

In [14]: s.getvalue()
Out[14]: ',A,B\n0,0,1\n1,1,6\n'
Righteousness answered 22/4, 2014 at 22:53 Comment(1)
-1 as it is an overkill (maybe it was from a previous version of pandas). But in latest if no path_or_buf is provided the result is returned as a string. See answer below.Unbelieving
M
188

The simplest way is just to not input any filename, in this case a string is returned:

>>> df = pd.DataFrame({'A' : [0, 1], 'B' : [1, 6]})
>>> df.to_csv()
',A,B\n0,0,1\n1,1,6\n'
Maquis answered 4/1, 2015 at 17:20 Comment(1)
If you are using a series, you need to wrap it in a dataframe constructor: pandas.DataFrame(series).to_csv().Grevera
R
53
In [10]: df = pd.DataFrame({'A' : [0, 1], 'B' : [1, 6]})

In [11]: import io

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

In [13]: df.to_csv(s)

In [14]: s.getvalue()
Out[14]: ',A,B\n0,0,1\n1,1,6\n'
Righteousness answered 22/4, 2014 at 22:53 Comment(1)
-1 as it is an overkill (maybe it was from a previous version of pandas). But in latest if no path_or_buf is provided the result is returned as a string. See answer below.Unbelieving

© 2022 - 2024 — McMap. All rights reserved.