103

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?

2 Answers 2

200

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'
Sign up to request clarification or add additional context in comments.

1 Comment

If you are using a series, you need to wrap it in a dataframe constructor: pandas.DataFrame(series).to_csv().
54
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'

1 Comment

-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.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.