pandas:如何从列表的dict创建数据帧

时间:2016-01-15 15:15:41

标签: json dictionary pandas dataframe

如何将其转换为pandas数据框?

df_components = { "result1": 
  {"data" : [["43", "48", "27", "12"], ["67", "44", "24", "11"], ["11.85", "6.31", "5.18", "11.70"]],
  "index" : [["Device_use_totala11. PS4", "Unweighted base"], ["Device_use_totala11. PS4", "Base"], ["Device_use_totala11. PS4", "Mean"]],
  "columns" : [["Age", "Under 30"], ["Age", "30-44"], ["Age", "45-54"], ["Age", "55+"]]}
}

这是一份列表清单。

我认为这会有效,但它会返回一些看起来不像数据帧的时髦的东西

pd.DataFrame(df_components['result1'])

输出如下:

columns  [[Age, Under 30], [Age, 30-44], [Age, 45-54], ...
data     [[43, 48, 27, 12], [67, 44, 24, 11], [11.85, 6...
index    [[Device_use_totala11. PS4, Unweighted base], ...

预期产出:

多索引df,类似于下表?

enter image description here

1 个答案:

答案 0 :(得分:1)

您的dict格式不正确,无法将其直接转换为DataFrame,您需要执行以下操作:

d = df_components["result1"]
df = pd.DataFrame(d["data"],
                  columns=pd.MultiIndex.from_tuples(d["columns"]),
                  index=pd.MultiIndex.from_tuples(d["index"]))

df
                                              Age                   
                                         Under 30 30-44 45-54    55+
Device_use_totala11. PS4 Unweighted base       43    48    27     12
                         Base                  67    44    24     11
                         Mean               11.85  6.31  5.18  11.70