JohnJ
JohnJ

Reputation: 7056

pandas unravel list to columns

I am quite new to pandas, and I have a numpy list looking like so:

something=[10,20,30,40,50]

When I convert it to a pandas dataframe hgowever, I have the entire list as one element:

dataset = pd.DataFrame({'something': something, \
                          'something2': something2}, \
                          columns=['something', 'something2'])

and I get:

   something
0 [10,20,30,40,50]

What I would like is:

  0  1  2  3  4
0 10 20 30 40 50

i.e list elements as individual columns.

Upvotes: 1

Views: 873

Answers (3)

sammywemmy
sammywemmy

Reputation: 28669

pandas dataframe from dict could help:

something=[10,20,30,40,50]
something2 = [25,30,22,1,5]
data = {'something':something,'something2':something2}

pd.DataFrame.from_dict(data,orient='index')

             0  1   2   3   4
something   10  20  30  40  50
something2  25  30  22  1   5

If you don't care for the indexes, and want them to be integers, reset_index should suffice:

pd.DataFrame.from_dict(data,orient='index').reset_index(drop=True)

Upvotes: 1

Mayank Porwal
Mayank Porwal

Reputation: 34056

You can do this using pd.Dataframe.from_records:

In [323]: df = pd.DataFrame.from_records([something])

In [324]: df                                                                                                                                                                                                
Out[324]: 
    0   1   2   3   4
0  10  20  30  40  50

For multiple lists, you can simply do this:

In [337]: something2 = [101,201,301,401,501]                                                                                                                                                                  

In [338]: df = pd.DataFrame.from_records([something, something2])                                                                                                                                           

In [339]: df                                                                                                                                                                                                
Out[339]: 
     0    1    2    3    4
0   10   20   30   40   50
1  101  201  301  401  501

EDIT: After OP's comment

If you want all lists to be creating multiple columns, you can try this:

In [349]: something                                                                                                                                                                                         
Out[349]: [10, 20, 30, 40, 50]

In [350]: something2                                                                                                                                                                                        
Out[350]: [101, 201, 301, 401, 501]

In [351]: something.extend(something2) 

In [353]: df = pd.DataFrame.from_records([something])                                                                                                                                                       

In [354]: df                                                                                                                                                                                                
Out[354]: 
    0   1   2   3   4    5    6    7    8    9
0  10  20  30  40  50  101  201  301  401  501

Upvotes: 1

The Guy
The Guy

Reputation: 421

If you are passing dictionary in Dataframe then by default, pandas treat the key as a column, you don't need to give columns name again, unless if you want different column names.

I tried following example:

import pandas as pd
something1=[10,20,30,40,50]
something2=[101,201,301,401,501]

pd.DataFrame([something1,something2])

Output

    0   1   2   3   4
0   10  20  30  40  50
1   101 201 301 401 501

let me know if this works for you or not.

Upvotes: 0

Related Questions