【问题标题】:Convert dictionary with both nested and non-nested items into dataframe将具有嵌套和非嵌套项的字典转换为数据框
【发布时间】:2021-11-02 16:23:29
【问题描述】:

我有以下字典:

{'instance_1': {'race': {'asian': 0,
   'black': 99,
   'white': 9},
  'dominant_race': 'black',
  'region': {'x': 0, 'y': 0, 'w': 100, 'h': 100}},
 'instance_2': {'race': {'asian': 0,
   'black': 0,
   'white': 89},
  'dominant_race': 'white',
  'region': {'x': 6, 'y': 12, 'w': 79, 'h': 79}}}

并希望将其转换为 pandas 数据框,以便每个项目中的每个元素都是其自己的列,例如

item asian black white dominant_race x y w h
instance_1 0 99 9 black 0 0 100 100
instance_2 0 0 89 white 6 12 79 79

pd.DataFrame.to_dict() 与 orient=index 一起使用会产生以下结果

pd.DataFrame.from_dict(predictions, orient='index')

            race                                 dominant_race  \
instance_1  {'asian': 0, 'black': 99....         black   
instance_2  {'asian': 0, 'black': 0.....         white   

                                            region  
instance_1    {'x': 0, 'y': 0, 'w': 100, 'h': 100}  
instance_2     {'x': 6, 'y': 12, 'w': 79, 'h': 79}  

如何转换字典以使“race”和“region”中的每个元素都是自己的列?

【问题讨论】:

    标签: python pandas dataframe dictionary


    【解决方案1】:

    .apply(pd.Series) 会将单元格中的字典分成不同的列。

    假设上面的示例很好地代表了您的真实数据,您可以先使用 pd.DataFrame().T ,然后使用 concat 组合来自 region 和 race 的新形成的列:

    df = pd.DataFrame(d).T # d being your sample dictionary
    
    res = pd.concat([df['race'].apply(pd.Series),
                   df['dominant_race'],
                   df['region'].apply(pd.Series)], axis=1)
    

    将打印的内容:

    res
    Out[262]: 
                asian  black  white dominant_race  x   y    w    h
    instance_1      0     99      9         black  0   0  100  100
    instance_2      0      0     89         white  6  12   79   79
    

    【讨论】:

    • 太棒了——非常感谢!
    猜你喜欢
    • 2014-05-10
    • 1970-01-01
    • 2021-11-28
    • 2022-01-07
    • 1970-01-01
    • 2021-03-03
    • 2021-08-30
    • 2018-08-14
    相关资源
    最近更新 更多