将复杂的数据字典转换为数据框

时间:2019-04-04 20:52:37

标签: python dataframe

我有以下字典:

 {
   'process':{
      'state':'running',
      'username':'abc',
      'ppid':624,
      'cpu':{
         'total':{
            'pct':0.0
         },
         'start_time':'2019-03-14'
      },
      'cmdline':'acde',
      'pgid':0,
      'name':'xct',
      'memory':{
         'size':3608576,
         'rss':{
            'bytes':28897280,
            'pct':0.0008
         },
         'share':0
      },
      'pid':696
   }
}

希望看到:

state   username    ppid    pct start_time  cmdline pgid    name    size    bytes   pct share   pid
running abc 624 0   03/14/2019  acde    0   xct 3608576 28897280    0.0008  0   696

请注意,我已经忽略了这些:

  process
   cpu
    total
   rss

因为它们是数据字典(我从那里获取值,所以我不在乎并且可以忽略)

1 个答案:

答案 0 :(得分:0)

我不知道自动执行此操作的方法,但这似乎可行:

此方法可以“平整”字典(提取所有内部字典)

def flatten_dict(d):
    flat = []
    for k,v in d.items():
        if (isinstance(v,dict)):
            flat.extend(flatten_dict(v))
        else:
            flat.append((k,v))
    return flat

然后,您可以使用它生成一个序列(来自dict),并将其转换为您在OP中显示的数据框:

pd.DataFrame(pd.Series({a:b for a,b in flatten_dict(data)})).transpose()

(其中data是您的原始嵌套字典)

我得到的输出:

state   username    ppid    pct start_time  cmdline pgid    name    size    bytes   share   pid
0   running abc 624 0.0008  2019-03-14  acde    0   xct 3608576 28897280    0   696

请注意,pct出现了两次,并导致其中一个覆盖了另一个-您可以通过不将方法的最终输出(元组列表)转换为字典来克服这一问题-您的简称帖子不够具体,不足以在此级别的细节上确切了解您想要什么。

请让我知道是否不清楚或无法正常工作。