2015-08-24 4 views
1

У меня есть следующий вложенный словарь:Преобразование словаря словаря словаря панд кадра данных

In [3]: nested_dict 
Out[3]: 
{'2': {'lagtime': {'darkgreen': 210, 
    'darkorange': 141, 
    'pink': 142, 
    'red': 141}}} 

То, что я хочу сделать, это создать кадр данных

0 2 darkgreen lagtime 210 
1 2 darkorange lagtime 141 
2 2  pink lagtime 142 
3 2   red lagtime 141 

Я попытался это, но не :

import pandas as pd 
pd.DataFrame.from_dict(nested_dict) 

Я получаю неожиданный вывод:

Out[4]: 
                 2 
lagtime {u'pink': 142, u'darkorange': 141, u'darkgreen... 

Каков правильный путь?

+0

Вы получаете ошибка или неожиданный выход? В обоих случаях, пожалуйста, распечатайте его тоже. – Vaulstein

ответ

2

Сначала вам нужно преобразовать вложенный словарь в список словарей или словарь списков, а затем только вы можете преобразовать его в DataFrame. Пример (преобразование в список словарей) -

list_of_dict = [] 
for key, value in nested_dict.items(): 
    for key1, value1 in value.items(): 
     for key2,value2 in value1.items(): 
      list_of_dict.append({'A':key,'B':key1,'C':key2,'D':value2}) 

df = pd.DataFrame(list_of_dict) 

Используйте правильные имена столбцов вместо 'A', 'B' и т.д.


Пример/Demo -

In [2]: nested_dict = {'2': {'lagtime': {'darkgreen': 210, 
    ...: 'darkorange': 141, 
    ...: 'pink': 142, 
    ...: 'red': 141}}} 

In [4]: list_of_dict = [] 

In [7]: for key, value in nested_dict.items(): 
    ...:  for key1, value1 in value.items(): 
    ...:   for key2,value2 in value1.items(): 
    ...:    list_of_dict.append({'A':key,'B':key1,'C':key2,'D':value2}) 
    ...: 

In [8]: df = pd.DataFrame(list_of_dict) 

In [9]: df 
Out[9]: 
    A  B   C D 
0 2 lagtime darkgreen 210 
1 2 lagtime  pink 142 
2 2 lagtime darkorange 141 
3 2 lagtime   red 141 
Смежные вопросы