Преобразовать список словарей в фрейм данных с одним столбцом для ключей и одним для значений - PullRequest
0 голосов
/ 05 июля 2018

Предположим, у меня есть следующий список:

list1 = [{'a': 1}, {'b': 2}, {'c': 3}]

Который я хочу преобразовать в кадр данных panda, который имеет два столбца: один для ключей и один для значений.

    keys    values
0    'a'      1
1    'b'      2
2    'c'      3

Для этого я попытался использовать pd.DataFrame(list1), а также pd.DataFrame.from_records(list1), но в обоих случаях я получаю такой кадр данных:

     a    b    c
0  1.0  NaN  NaN
1  NaN  2.0  NaN
2  NaN  NaN  3.0

Есть ли способ указать, что я хочу? Проводя исследования, я мог найти только то, что описал выше.

Ответы [ 3 ]

0 голосов
/ 05 июля 2018

Если ваши ключи в словарях уникальны, вы можете создать один словарь и подать в pd.DataFrame.from_dict. Этому может способствовать collections.ChainMap:

from collections import ChainMap

list1 = [{'a': 1}, {'b': 2}, {'c': 3}]

df = pd.DataFrame.from_dict(ChainMap(*list1), orient='index').reset_index()

df.columns = ['key', 'value']

print(df)

  key  value
0   a      1
1   b      2
2   c      3

В качестве альтернативы, вы можете напрямую обратиться к конструктору pd.DataFrame через список:

df = pd.DataFrame(list(ChainMap(*list1).items()))
0 голосов
/ 05 июля 2018

Хотя @jezrael отлично ответил на мой вопрос, я хотел бы отметить, что если вы преобразуете каждый словарь ({'a':1}) в список (['a',1]), вам просто нужно будет использовать pd.DataFrame(list1), чтобы получить желаемый результат. результат.

0 голосов
/ 05 июля 2018

Используйте list comprehension с выравниванием для списка кортежей:

df = pd.DataFrame([(i, j) for a in list1 for i, j in a.items()], 
                   columns=['keys','values'])
print (df)
  keys  values
0    a       1
1    b       2
2    c       3

Деталь

print ([(i, j) for a in list1 for i, j in a.items()])

[('a', 1), ('b', 2), ('c', 3)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...