使用值作为列将嵌套的dict从json转换为数据帧

时间:2019-06-05 07:59:51

标签: python json pandas

我有一个来自json的字典,其中我通过循环汇总每个通过API回答的个人的调查结果,并希望将其转换为使用“ title”值作为列的数据框,然后将所有一行中一个人的答案。

这是参加调查的一个人的原始结果的样子:

Result ID  |  What department do you work in? | I can focus on clear targets
    1      |  Unit D                          | Yes 

这是数据框的外观:

if(oldString == newString || [oldString isEqualToString:newString]) {
   // strings are the same
}

我在熊猫中尝试了几种不同的选择,但无法获得预期的结果。

1 个答案:

答案 0 :(得分:1)

如果每个人都有一个非空值,请使用带有过滤功能的嵌套字典理解:

d =  {'0': {'title': 'What department do you work?',
    'results': {'0': '', '1': '', '2': '', '3': 'Unit D'}}, 
    '1': {'title': 'I can focus on clear targets?',
    'results': {'0': 'Yes', '1': '', '2': ''}}}

df = pd.DataFrame({v['title']: [v1 for k1, v1 in v['results'].items() if v1] 
                   for k, v in d.items()})
print (df)
  What department do you work? I can focus on clear targets?
0                       Unit D                           Yes

如果可能的话,有多个值:

d =  {'0': {'title': 'What department do you work?',
    'results': {'0': '', '1': '', '2': '', '3': 'Unit D'}}, 
    '1': {'title': 'I can focus on clear targets?',
    'results': {'0': 'Yes', '1': 'No', '2': ''}}}


df = pd.DataFrame({v['title']: pd.Series([v1 for k1, v1 in v['results'].items() if v1])
                   for k, v in d.items()})
print (df)
  What department do you work? I can focus on clear targets?
0                       Unit D                           Yes
1                          NaN                            No