Python / Pandas - помещает список диктов в DataFrame Pandas - Dict Keys должен быть столбцами

1

У меня есть список с большим количеством диктонов. У каждого Дикта есть 5 пар ключей/ценностей.

пример Dict

{ 
  'name': 'Demetrius',
  'number': '0001',
  'style': 'D',
  'text': 'Demetrius an der russischen Grenze. Er ist von Kiew...',
  'year': '1797'
}

моя цель:

моя цель - это DataFrame со следующим порядком. Каждый Дикт в своем собственном ряду

>>> df
number  name        year  style  text
0001    Demetrius   1805  D      Demetrius an der russischen Grenze. Er ist von Kiew...
0002

Код:

d = содержимое текстового файла - список dicts,

book = a dict, как пример dict

>>>import pandas as pd

>>>df = pd.DataFrame()
>>>for book in d:
>>>    df = pd.concat([df, pd.DataFrame(list(book.items()))])

>>>print(df)

    0                  1
0   name               Demetrius
1   number             0001
2   style              D
3   text               Demetrius an der russischen Grenze. Er ist von Kiew...
4   year               1805
0   name               Der versöhnte Menschenfeind
1   number             0002
2   style              D
3   text               Der versöhnte Menschenfeind - Fragment  Gegend...
4   year               1790
...

Вопрос:

Как я могу достичь стиля Dataframe (моя цель) напрямую или как я могу изменить этот существующий df, что у меня есть мои dict.keys столбцы и значения из ключа "число" в качестве индекса?

решение: - благодаря jpp

>>> df = pd.DataFrame(d).set_index('number')
>>> df

         name                       style   text                                                year
number              
0001     Demetrius                      D   Demetrius an der russischen Grenze Er ist vo...     1805
0002     Der versöhnte Menschenfeind    D   Der versöhnte Menschenfeind - Fragment Gegend...    1790
Теги:
pandas
dataframe
dictionary

1 ответ

1
Лучший ответ

Конструктор pd.DataFrame принимает список словарей напрямую. Это будет более эффективно, чем повторное добавление к существующему файловому кадру. Вот демо:

d1 = {'name': 'Demetrius', 'number': '0001',
      'style': 'D', 'text': 'Demetrius an der...',
      'year': '1797'}

d2 = {'name': 'ABC', 'number': '0002',
      'style': 'E', 'text': 'Some text',
      'year': '1850'}

L = [d1, d2]

df = pd.DataFrame(L)

print(df)

        name number style                 text  year
0  Demetrius   0001     D  Demetrius an der...  1797
1        ABC   0002     E            Some text  1850
  • 1
    благодарю вас!! часы сложного мышления и попыток .... но это так легко. Почему я не нашел это простое решение в документах? Не бери в голову, я принимаю твой ответ так быстро, как stackoverflow позволяет мне это сделать.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню