2016-01-15 3 views
1

Как преобразовать это в рамку данных pandas?pandas: как создать dataframe из dict списков

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+"]]} 
} 

Это дикт со списком списков.

Я думал, что это будет работать, но она возвращает что-то в стиле фанк, который не смотрит как dataframe

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], ... 

Ожидаемый выход:

мульти индекс ФР, что-то похожее на таблицу ниже?

enter image description here

+0

Обратите внимание, что я не могу воспроизвести ваш выход, у меня есть 'ValueError: массивы должны быть одинаковой длины при выполнении 'pd.DataFrame (df_components)' с pandas 0.15.1 или 0.17.1 – jrjc

+0

df_components shouldve были df_components ['result1'] –

ответ

1

Ваш ДИКТ не отформатирован должным образом, чтобы превратить его непосредственно в 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 
+0

Я думаю, это может быть потому, что столбцы являются мультииндексами, а индекс - не? –

+0

ah ok, 'Age' и' Device ... 'являются более высоким индексом? Дело в том, что ключ вашего dict должен быть либо столбцами, либо индексом, и в кортеже, если несколько индексов. После этого вы только передаете имя столбца или индекса (тот, который отсутствует в dict). – jrjc

+0

Как насчет сейчас? Ive добавил имя df в dict. И да, возраст и устройство - это более высокий (outter) индекс. –