将字典列表从数据框的单个列转换为熊猫中的不同列

问题描述

我有一个名为“数据”的数据框

  updated_at          values                            user_id
0 2020-08-18    [{'value': 3742,'key': '0'},178414113
                 {'value': 3813,'key': '1'},{'value': 3918,'key': '2'},{'value': 2956,'key': '3'}]   
1 2020-08-19    [{'value': 3542,152285823
                 {'value': 2563,{'value': 3218,{'value': 2152,'key': '3'}]       

我要这样转换。

updated_at值键user_id

0 2020-08-18      3742           0               178414113
1 2020-08-18      3813           1               178414113 
2 2020-08-18      3918           2               178414113
3 2020-08-18      2956           3               178414113
4 2020-08-19      3542           0               152285823
5 2020-08-19      2563           1               152285823
6 2020-08-19      3218           2               152285823
7 2020-08-19      2152           3               152285823

请帮助我。 我尝试过

data_new = pd. Data Frame ( data ['values'].values. to list(),index= data. index)

但是没有用。

解决方法

您可以使用explode()方法将列表列扩展为这些列表中每个条目的单独行。然后,您可以利用apply(pd.Series)在每一行中扩展结果字典:

exploded = df.explode('values').reset_index(drop=True)
exploded[['value','key']] = exploded['values'].apply(pd.Series)
exploded.drop('values',axis=1,inplace=True)

收益:

   updated_at    user_id  value key
0  2020-08-18  178414113   3742   0
1  2020-08-18  178414113   3813   1
2  2020-08-18  178414113   3918   2
3  2020-08-18  178414113   2956   3
4  2020-08-19  152285823   3542   0
5  2020-08-19  152285823   2563   1
6  2020-08-19  152285823   3218   2
7  2020-08-19  152285823   2152   3