11

Say I have a DataFrame that looks like this:

df = pd.DataFrame([[1, 2, 3], [4, 5, 6], [7, 8, 9]], columns=['Col 1', 'Col 2', 'Col 3']) >>> df Col 1 Col 2 Col 3 0 1 2 3 1 4 5 6 2 7 8 9 

Is there a Pandas way of returning the DataFrame as a list of lists with the headers included?

I can return the headers and values as lists as follows

>>> df.columns.values.tolist() ['Col 1', 'Col 2', 'Col 3'] >>> df.values.tolist() [[1, 2, 3], [4, 5, 6], [7, 8, 9]] >>> df.tolist() 

But how could I return the following result?

[['Col 1', 'Col 2', 'Col 3'], [1, 2, 3], [4, 5, 6], [7, 8, 9]] 

2 Answers 2

13

Use double transpose with reset_index:

print (df.T.reset_index().values.T.tolist()) [['Col 1', 'Col 2', 'Col 3'], [1, 2, 3], [4, 5, 6], [7, 8, 9]] 

Or nicer insert:

a = df.columns.values.tolist() b = df.values.tolist() b.insert(0, a) print (b) [['Col 1', 'Col 2', 'Col 3'], [1, 2, 3], [4, 5, 6], [7, 8, 9]] 
Sign up to request clarification or add additional context in comments.

1 Comment

Nice, both suggestions work better than my original implementation. For my first attempt I used numpy.row_stack() in a similar implementation to that which you used for insert
5

You have two lists, so using:

[df.columns.values.tolist()] + df.values.tolist() >>> [['Col 1', 'Col 2', 'Col 3'], [1, 2, 3], [4, 5, 6], [7, 8, 9]] 

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.