MoMo
MoMo

Reputation: 107

dataframe from flatten column type series or list

I want to have a dataset from my starting dataset which is as follows::

time          details                  bis          as             go
01:20       {'direction': 'nord',      abc    {'a':12,'b':20 }     yes
                'label': 'one',
                'media': 'yes'}

01:25       {'direction': 'est',        def    {'a':2,'b':15 }     no
                'label': 'one',
                'media': 'no'}

desired result :

time     direction     label     media      bis       a     b     go
01:20      nord         one       yes       abc       12    20     yes

01:25      est         one         no       def        2    15     no

Upvotes: 0

Views: 35

Answers (2)

ansev
ansev

Reputation: 30920

Use pd.DataFrame + pd.concat:

df1=pd.DataFrame(df['details'].tolist())
df2=pd.DataFrame(df['as'].tolist())
new_df=pd.concat([df[['time','bis','go']],df1,df2],axis=1)
print(new_df)

    time  bis   go direction label media   a   b
0  01:20  abc  yes      nord   one   yes  12  20
1  01:25  def   no       est   one    no   2  15

Upvotes: 1

Dani Mesejo
Dani Mesejo

Reputation: 61910

Use pd.concat:

result = pd.concat([df[['time', 'bis', 'go']],
                    pd.DataFrame.from_records(df.details),
                    pd.DataFrame.from_records(df['as'])], axis=1)

print(result)

Output

    time  bis   go direction label media   a   b
0  01:20  abc  yes      nord   one   yes  12  20
1  01:25  def   no       est   one    no   2  15

You could reorder the columns like this:

result = result[['time', 'direction', 'label', 'media', 'bis', 'a', 'b', 'go']]

Upvotes: 1

Related Questions