【问题标题】:Create pandas dataframe from nested dict with outer keys as df index and inner keys column headers从嵌套字典创建熊猫数据框,外键作为df索引,内键列标题
【发布时间】:2016-01-13 18:41:12
【问题描述】:

我有一个嵌套字典,如下所示

dictA = {X:{A: 0.2, B:0.3, C:0.4} ,Y:{A: 0.05, B:0.8, C:0.1},Z:{A: 0.15, B:0.6, C:0.25}}

我想创建一个数据框,其中第一个键对应于索引,嵌套字典的键是列标题。例如,

     A    B    C
  X  0.2  0.3  0.4 
  Y  0.05 0.8  0.1
  Z  0.15 0.6  0.25

我知道我可以将外部字典中的键提取到列表中(使用列表理解):

index_list = [key for key in dictA.iterkeys()]

然后将嵌套字典合并成一个字典:

dict_list = [value for value in dictA.itervalues()]
final_dict = {k: v for dict in dict_list for k, v in dict.items()}

最后我可以通过以下方式创建我的df

df = pd.DataFrame(final_dict, index = index_list)

问题是我需要将正确的值映射回正确的索引,当字典的普通变化时这很困难。

我想有一种与我上面建议的完全不同且更有效的方法,请帮忙?

【问题讨论】:

    标签: python dictionary pandas nested dataframe


    【解决方案1】:

    使用from_dict 并传递orient='index' 它旨在处理这种形式的dict:

    In [350]:
    pd.DataFrame.from_dict(dictA, orient='index')
    
    Out[350]:
          A     C    B
    X  0.20  0.40  0.3
    Y  0.05  0.10  0.8
    Z  0.15  0.25  0.6
    

    【讨论】:

      【解决方案2】:

      您可以简单地将您的 dictA 转换为 DataFrame,然后进行转置,将列转换为索引并将索引转换为列。示例 -

      df = pd.DataFrame(dictA).T
      

      演示 -

      In [182]: dictA = {'X':{'A': 0.2, 'B':0.3, 'C':0.4} ,'Y':{'A': 0.05, 'B':0.8, 'C':0.1},'Z':{'A': 0.15, 'B':0.6, 'C':0.25}}
      
      In [183]: df = pd.DataFrame(dictA).T
      
      In [184]: df
      Out[184]:
            A    B     C
      X  0.20  0.3  0.40
      Y  0.05  0.8  0.10
      Z  0.15  0.6  0.25
      

      【讨论】:

        猜你喜欢
        • 2021-02-04
        • 1970-01-01
        • 1970-01-01
        • 2019-01-11
        • 1970-01-01
        • 2023-01-14
        • 1970-01-01
        • 2021-06-21
        相关资源
        最近更新 更多