Как создать Pandas DataFrame из списка OrderedDicts? - PullRequest
0 голосов
/ 20 октября 2018

У меня есть следующий список:

o_dict_list = [(OrderedDict([('StreetNamePreType', 'ROAD'), ('StreetName', 'Coffee')]), 'Ambiguous'),
           (OrderedDict([('StreetNamePreType', 'AVENUE'), ('StreetName', 'Washington')]), 'Ambiguous'),
           (OrderedDict([('StreetNamePreType', 'ROAD'), ('StreetName', 'Quartz')]), 'Ambiguous')]

И, как говорится в заголовке, я пытаюсь взять этот список и создать кадр данных pandas, в котором столбцы: 'StreetNamePreType' и 'StreetName' истроки содержат соответствующие значения для каждого ключа в OrderedDict.

Я выполнил поиск в StackOverflow, чтобы получить некоторые инструкции о том, как создать кадр данных, см. здесь , но я получаю ошибкукогда я запускаю этот код (я пытаюсь воспроизвести то, что происходит в этом ответе).

from collections import Counter, OrderedDict
import pandas as pd

col = Counter()
for k in o_dict_list:
    col.update(k)

df = pd.DataFrame([k.values() for k in o_dict_list], columns = col.keys())

Когда я запускаю этот код, я получаю ошибку: TypeError: unhashable type: 'OrderedDict'

Я посмотрел эту ошибку, здесь , я понял, что есть проблема с типами данных, но я, к сожалению, я недостаточно знаю о внутренней работе Python / Pandas, чтобы решить эту проблему на моемown.

Я подозреваю, что мой список OrderedDict не совсем такой, как в здесь , поэтому я не заставляю свой код работать.Более конкретно, я считаю, что у меня есть список наборов, и каждый элемент содержит OrderedDict.Пример, который я связал с здесь , кажется правильным списком OrderedDicts.

Опять же, я недостаточно знаю о внутренней работе Python / Pandas, чтобы самостоятельно решить эту проблему, и ищу помощи.

Ответы [ 3 ]

0 голосов
/ 20 октября 2018
d = [{'points': 50, 'time': '5:00', 'year': 2010}, 
{'points': 25, 'time': '6:00', 'month': "february"}, 
{'points':90, 'time': '9:00', 'month': 'january'}, 
{'points_h1':20, 'month': 'june'}]

pd.DataFrame(d)
0 голосов
/ 20 октября 2018

Я бы использовал списочное понимание, чтобы сделать это следующим образом.

pd.DataFrame([o_dict_list[i][0] for i, j in enumerate(o_dict_list)])

См. Вывод ниже.

 StreetNamePreType  StreetName
0   ROAD            Coffee
1   AVENUE          Washington
2   ROAD            Quartz
0 голосов
/ 20 октября 2018

извлечение OrderedDict объектов из вашего списка с последующим использованием pd.Dataframe должно работать

values= []
for i in range(len(o_dict_list)):
    values.append(o_dict_list[i][0])

pd.DataFrame(values)


    StreetNamePreType   StreetName
0   ROAD    Coffee
1   AVENUE  Washington
2   ROAD    Quartz
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...