【问题标题】:How to transform a nested dictionary to pandas DataFrame如何将嵌套字典转换为 pandas DataFrame
【发布时间】:2019-04-03 09:03:18
【问题描述】:

我有以下嵌套字典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') 
       }
   }
}

我需要得到这个 pandas DataFrame:

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()

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    为两个级别创建带有附加键的字典列表并调用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  
    

    【讨论】:

    • 谢谢! ddict?
    猜你喜欢
    • 2019-12-09
    • 2023-01-17
    • 2013-11-16
    • 2019-04-08
    • 2023-02-10
    • 2018-10-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多