【问题标题】:Extract nested JSON in pandas dataframe在熊猫数据框中提取嵌套的 JSON
【发布时间】:2017-04-03 19:30:36
【问题描述】:

我正在尝试在以下 pandas 数据框中解压缩嵌套的 JSON:

           id                                                              info
0           0  [{u'a': u'good', u'b': u'type1'}, {u'a': u'bad', u'b': u'type2'}]
1           1  [{u'a': u'bad', u'b': u'type1'}, {u'a': u'bad', u'b': u'type2'}]
2           2  [{u'a': u'good', u'b': u'type1'}, {u'a': u'good', u'b': u'type2'}]

我的预期结果是:

           id        type1    type2
0           0        good     bad
1           1        bad      bad
2           2        good     good

我一直在寻找其他解决方案,包括json_normalize,但不幸的是它对我不起作用。我应该把 JSON 当作一个字符串来得到我想要的吗?还是有更直接的方法来做到这一点?

【问题讨论】:

    标签: python json pandas


    【解决方案1】:
    1. 使用json_normalize 处理字典的list 并在设置公共路径后将单个字典分成单独的系列,此处为info。然后,unstack + apply 系列将向下附加到该级别。

    from pandas.io.json import json_normalize
    
    df_info = json_normalize(df.to_dict('list'), ['info']).unstack().apply(pd.Series)
    df_info
    

    1. 使用可选的aggfunc 旋转DF 以处理重复的索引轴:

    DF = df_info.pivot_table(index=df_info.index.get_level_values(1), columns=['b'], 
                             values=['a'], aggfunc=' '.join)
    
    DF
    

    1. 最后横向连接:

    pd.concat([df[['ID']], DF.xs('a', axis=1).rename_axis(None, 1)], axis=1)
    


    开始使用DF

    df = pd.DataFrame(dict(ID=[0,1,2], info=[[{u'a': u'good', u'b': u'type1'}, {u'a': u'bad', u'b': u'type2'}], 
                                            [{u'a': u'bad', u'b': u'type1'}, {u'a': u'bad', u'b': u'type2'}],
                                            [{u'a': u'good', u'b': u'type1'}, {u'a': u'good', u'b': u'type2'}]]))
    

    【讨论】:

    • 工作就像一个魅力。只需首先将行类型从str更改为list。不错的小技巧。非常感谢!
    猜你喜欢
    • 2022-07-12
    • 2017-11-28
    • 2020-05-23
    • 2019-03-18
    • 1970-01-01
    • 1970-01-01
    • 2016-07-07
    • 2019-07-28
    • 2018-04-15
    相关资源
    最近更新 更多