首页 > 解决方案 > 如何将嵌套字典转换为 pandas DataFrame

问题描述

我有以下嵌套字典dict

{
 'x1': 
   {
    'k1': 
      {
        'first_col': 'Date',
        'col_type': pandas._libs.tslibs.timestamps.Timestamp,
        'col_min_val': Timestamp('2017-12-04 00:00:00') 
      },
     'k2': 
      {
        'first_col': 'Date',
        'col_type': pandas._libs.tslibs.timestamps.Timestamp,
        'col_min_val': Timestamp('2018-02-02 00:00:00')
      }
    }
 'x2': 
   {
     'k1': 
       {
         'first_col': 'Date',
         'col_type': pandas._libs.tslibs.timestamps.Timestamp,
         'col_min_val': Timestamp('2017-12-04 05:00:00') 
       }
   }
}

我需要得到这个熊猫数据框:

col1   col2   first_col   col_type                                   col_min_val
x1     k1     Date        pandas._libs.tslibs.timestamps.Timestamp   Timestamp('2017-12-04 00:00:00')
x1     k2     Date        pandas._libs.tslibs.timestamps.Timestamp   Timestamp('2018-02-02 00:00:00')
x2     k1     Date        pandas._libs.tslibs.timestamps.Timestamp   Timestamp('2017-12-04 05:00:00')

这是我尝试过的,但结果与预期的不一致:

pd.DataFrame(dict).stack().reset_index()

标签: pythonpandas

解决方案


使用两个级别的附加键创建字典列表并调用DataFrame构造函数:

编辑:

不要dict用于变量名,因为 python 代码字 ( builtin)。

#https://stackoverflow.com/a/34757497
L = [dict(d[i][j], **{'col1': i,'col2': j})
       for i in d.keys() 
       for j in d[i].keys()]

df = pd.DataFrame(L)
print (df)

  col1 col2         col_min_val                                  col_type  \
0   x1   k1 2017-12-04 00:00:00  pandas._libs.tslibs.timestamps.Timestamp   
1   x1   k2 2018-02-02 00:00:00  pandas._libs.tslibs.timestamps.Timestamp   
2   x2   k1 2017-12-04 05:00:00  pandas._libs.tslibs.timestamps.Timestamp   

  first_col  
0      Date  
1      Date  
2      Date  

推荐阅读