Как преобразовать defaultdict (список) в Pandas DataFrame - PullRequest
0 голосов
/ 10 января 2019

У меня есть объект defaultdict (список), имеющий следующую структуру:

{id: [list[list]]}

например,

'a1': [[0.01, 'cat']],

'a2': [[0.09, 'cat']],

'a3': [[0.5, 'dog']],

...

Я хотел бы преобразовать это defaultdict(list) в Pandas DataFrame объект.

Я пробовал со следующим:

df = pd.DataFrame(list(my_dict.items()), columns=['id', 'category'])

Однако у меня возникла проблема с моим столбцом категории. Это столбец списка списка. Я пытаюсь разделить 2 значения в категории на 2 отдельных столбца. Таким образом, мои последние столбцы DataFrame будут ['id', 'score', 'category'].

Когда я попробовал с нижеприведенной функцией Применить:

db['category'].apply(lambda x: x[0][0])

Я получил сообщение об ошибке «индекс списка вне диапазона».

Что может быть не так с моим кодом? Как мне создать 2 новых столбца из списка списков?

Спасибо.

Ответы [ 2 ]

0 голосов
/ 10 января 2019

Использование списка понимания

Ex:

import pandas as pd
d = {'a1': [[0.01, 'cat']], 'a2': [[0.09, 'cat']],'a3': [[0.5, 'dog']]}


df = pd.DataFrame([[k] + j for k,v in d.items() for j in v], columns=['id', 'score', 'category'])
print(df)

Выход:

   id  score category
0  a1   0.01      cat
1  a3   0.50      dog
2  a2   0.09      cat
0 голосов
/ 10 января 2019

Я считаю, что вам нужно:

df = pd.DataFrame([[k] + v[0] for k, v in my_dict.items()], 
                   columns=['id', 'score', 'category'])

Или:

df = pd.DataFrame([(k, v[0][0], v[0][1]) for k, v in my_dict.items()], 
                   columns=['id', 'score', 'category'])
...