为了账号安全,请及时绑定邮箱和手机立即绑定

如何在数据框的一行中的列表内解压缩多个字典对象?

如何在数据框的一行中的列表内解压缩多个字典对象?

鸿蒙传说 2021-05-07 02:37:20
我有一个带有以下字典的数据框,该字典在每行和每行的单个列表中,列表的大小不同,它们的大小也不同,如下所示:ID    unnest_column1     [{'abc': 11, 'def': 1},{'abc': 15, 'def': 1},     {'abc': 16, 'def': 1},     {'abc': 17, 'def': 1},     {'abc': 18, 'def': 1, 'ghi': 'abc'},     {'abc': 23, 'def': 'xxx', 'def': 1},     {'abc': 23, 'def': 'xxx', 'def': 2},     {'abc': 23, 'def': 'xxx', 'def': 4}]2   [{'abc': 11, 'def': 1}]如何解压缩列表中的字典并创建键值列?新的df可能(不确定确切的外观),只需要在各列中输入键即可:id    abc    def     ghi1       2             3         abc
查看完整描述

1 回答

?
GCT1015

TA贡献1827条经验 获得超4个赞

df = pd.DataFrame()

df['x'] = [[{'QuestionId': 11, 'ResponseId': 1},{'QuestionId': 15, 'ResponseId': 1},

 {'QuestionId': 16, 'ResponseId': 1},

 {'QuestionId': 17, 'ResponseId': 1},

 {'QuestionId': 18, 'ResponseId': 1, 'Value': 'abc'},

 {'QuestionId': 23, 'DataLabel': 'xxx', 'ResponseId': 1},

 {'QuestionId': 23, 'DataLabel': 'xxx', 'ResponseId': 2},

 {'QuestionId': 23, 'DataLabel': 'xxx', 'ResponseId': 4}],

[{'QuestionId': 11, 'ResponseId': 1}]]

您可以sum将列表进行汇总,然后使用DataFrame构造函数


new_df = pd.DataFrame(df.x.values.sum())



    DataLabel   QuestionId  ResponseId  Value

0   NaN         11          1           NaN

1   NaN         15          1           NaN

2   NaN         16          1           NaN

3   NaN         17          1           NaN

4   NaN         18          1           abc

5   xxx         23          1           NaN

6   xxx         23          2           NaN

7   xxx         23          4           NaN

8   NaN         11          1           NaN

如果要维护原始索引,可以构建一个inds列表并将其作为参数传递给构造函数:


inds = [index for _ in ([i] * len(v) for i,v in df.x.iteritems()) for index in _]

pd.DataFrame(df.x.values.sum(), index=inds)


    DataLabel   QuestionId  ResponseId  Value

0   NaN         11          1           NaN

0   NaN         15          1           NaN

0   NaN         16          1           NaN

0   NaN         17          1           NaN

0   NaN         18          1           abc

0   xxx         23          1           NaN

0   xxx         23          2           NaN

0   xxx         23          4           NaN

1   NaN         11          1           NaN


查看完整回答
反对 回复 2021-05-11
  • 1 回答
  • 0 关注
  • 161 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号