仅使用某个键

时间:2018-03-07 16:54:38

标签: python pandas dictionary

我有一个这样的字典词典列表:

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

1 个答案:

答案 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