我正在尝试在以下 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当作字符串来获取我想要的吗?还是有更直接的方法来做到这一点?

最佳答案

  • 使用json_normalize处理字典的list,并在设置公共(public)路径后将各个字典分成单独的系列,这是这里的信息。然后,添加unstack + apply系列,该系列向下附加到该级别。

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

    python - 在pandas数据框中提取嵌套的JSON-LMLPHP
  • 用可选的DF旋转aggfunc以处理重复的索引轴:

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

    python - 在pandas数据框中提取嵌套的JSON-LMLPHP
  • 最后横向连接:

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

    python - 在pandas数据框中提取嵌套的JSON-LMLPHP

    开始使用的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'}]]))
    

    关于python - 在pandas数据框中提取嵌套的JSON,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40702633/

    10-12 23:34