turtle
turtle

Reputation: 8083

How to generate a list from a pandas DataFrame with the column name and column values?

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.

Upvotes: 17

Views: 27146

Answers (5)

Jarad
Jarad

Reputation: 18933

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

Upvotes: 0

bobleponge
bobleponge

Reputation: 161

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

Upvotes: 7

Joop
Joop

Reputation: 8108

@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

Upvotes: 11

THM
THM

Reputation: 805

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)

Upvotes: 3

BrenBarn
BrenBarn

Reputation: 251378

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

Upvotes: 36

Related Questions