18

I have a pandas dataframe object that looks like this:

   one  two  three  four  five
0    1    2      3     4     5
1    1    1      1     1     1

I'd like to generate a list of lists objects where the first item is the column label and the remaining list values are the column data values:

nested_list = [['one', 1, 1]
               ['two', 2, 1]
               ['three', 3, 1]
               ['four', 4, 1]
               ['five', 5, 1]]

How can I do this? Thanks for the help.

5 Answers 5

36

Simplest way is probably list(dt.T.itertuples()) (where dt is your dataframe). This generates a list of tuples.

Sign up to request clarification or add additional context in comments.

3 Comments

Thanks! I did not know about itertuples().
I also didn't realise itertuples was there... - elegant +1
Creates list of tuples though not list of lists
11

@BrenBarn answer above yields a list of tuples not a list of list as asked in question. I specifically needed a list of lists to be able to write the dataframe into spreadsheed using DataNitro. Adapted the above example with list comprehension:

[list(x) for x in dt.T.itertuples()]

This yields the result as needed

Comments

7

Strictly speaking if you want nested lists (and not a list of tuples) you can do

df.values.tolist()

as df.values is a numpy array. That will give you a list of lists as requested:

[[0.0001313652121930252, 3.5915356549999985e-05], 
 [3.5915356549999985e-05, 0.00011634321240684215]]

Comments

3

My naive approach would be using iteritems with 'll' as a list of lists and l as a single list.

df = DataFrame({'one':[1,1], 'two':[2,1], 'three':[3,1], 'four':[3,1] })

ll = []

for idx,row in df.iteritems():
    l = row.values.tolist()
    l.insert(0,idx)
    ll.append(l)

Comments

0

Old question I know, but this makes more sense to me than these other answers.

If this is your dataframe:

df = pd.DataFrame({'one': [1, 1], 'three': [3, 1], 'four': [4, 1],
           'five': [5, 1], 'two': [2, 1]},
          columns=['one', 'two', 'three', 'four', 'five'])

Do this:

df.T.reset_index().values.tolist()

Result

[['one', 1, 1], ['two', 2, 1], ['three', 3, 1], ['four', 4, 1], ['five', 5, 1]]

Comments

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.