我有一个这样的字典词典列表:
d = [{'c1': {'ignore1': 'me1', 'use': 'me'},
'c2': {'ignore2': 5., 'use': 12}},
{'c1': {'ign': 2, 'use': 'me2', 'foo': 123},
'c2': {'ignore2': 5., 'use': 14}}
]
并希望构建一个这样的数据框:
c1 c2
0 me 12
1 me2 14
所以我想只使用嵌套字典中的键use
,主字典的键作为列名。
当我这样做时
pd.DataFrame.from_records(d)
我收到了
c1 c2
0 {u'use': u'me', u'ignore1': u'me1'} {u'use': 12, u'ignore2': 5.0}
1 {u'ign': 2, u'use': u'me2', u'foo': 123} {u'use': 14, u'ignore2': 5.0}
可能的解决方案可能如下所示:
df2 = pd.io.json.json_normalize(d).filter(regex='.use$')
df2.columns = df2.columns.str.replace('.use', "")
这给了我想要的结果。
是否有直接的方式来过滤所需的密钥,例如以不同的方式使用.from_records
?
答案 0 :(得分:1)
一种方法是操纵您的词典并在新词典上应用pd.DataFrame
:
d = [{'c1': {'ignore1': 'me1', 'use': 'me'},
'c2': {'ignore2': 5., 'use': 12}},
{'c1': {'ign': 2, 'use': 'me2', 'foo': 123},
'c2': {'ignore2': 5., 'use': 14}}]
d2 = [{k: v['use'] for k, v in i.items()} for i in d]
# [{'c1': 'me', 'c2': 12}, {'c1': 'me2', 'c2': 14}]
df = pd.DataFrame(d2)
# c1 c2
# 0 me 12
# 1 me2 14