> For the complete documentation index, see [llms.txt](https://bemind.gitbook.io/neural/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://bemind.gitbook.io/neural/python/python-lists/konvertaciya-spiska-slovarei-v-pandas-dataframe.md).

# Конвертация списка словарей в Pandas DataFrame

В этом учебнике вы научитесь преобразовывать список словарей Python в DataFrame Pandas. Pandas предлагает несколько способов преобразования словарей в DataFrame. Вы узнаете, как использовать метод `from_dict` Pandas, конструктор DataFrame и функцию

К концу этого урока вы узнаете:

* Как преобразовать список словарей в DataFrame Pandas
* Как работать с разными наборами столбцов в словарях
* Как установить индекс при преобразовании списка словарей в DataFrame
* Как преобразовать вложенные словари в DataFrame Pandas

Оглавление

* [Краткое изложение методов](#kratkoe-izlozhenie-metodov)
* [Преобразование списка словарей в фрейм данных Pandas](#preobrazovanie-spiska-slovarei-v-freim-dannykh-pandas)
* [Работа с отсутствующими ключами при преобразовании списка словарей в таблицу данных Pandas](#rabota-s-otsutstvuyushimi-klyuchami-pri-preobrazovanii-spiska-slovarei-v-tablicu-dannykh-pandas)
* [Чтение только некоторых столбцов при преобразовании списка словарей в таблицу данных Pandas](#chtenie-tolko-nekotorykh-stolbcov-pri-preobrazovanii-spiska-slovarei-v-tablicu-dannykh-pandas)
* [Установка индекса при преобразовании списка словарей в таблицу данных Pandas](#ustanovka-indeksa-pri-preobrazovanii-spiska-slovarei-v-tablicu-dannykh-pandas)
* [json\_normalize: чтение вложенных словарей в таблицу данных Pandas](#json_normalize-chtenie-vlozhennykh-slovarei-v-tablicu-dannykh-pandas)
* [Заключение](#zaklyuchenie)
* [Дополнительные ресурсы](#dopolnitelnye-resursy)

### Краткое изложение методов

В таблице ниже приводятся различные способы чтения списка словарей в DataFrame Pandas. Каждый из этих методов рассмотрен детально в течение учебного пособия:

| Имя метода            | Работает с отсутствующими ключами | Читать только некоторые столбцы | Установить индекс              | Чтение вложенных словарей |
| --------------------- | --------------------------------- | ------------------------------- | ------------------------------ | ------------------------- |
| **DataFrame()**       | Да                                | Да                              | Да                             | Нет                       |
| **from\_dict()**      | Да                                | Да                              | Только используя`.set_index()` | Нет                       |
| **from\_records()**   | Да                                | Да                              | Да                             | Нет                       |
| **json\_normalize()** | Да                                | Да                              | Да                             | Да                        |

В этом разделе вы узнаете, как преобразовать список словарей в объект DataFrame с использованием класса `DataFrame` в Pandas. Передав список словарей, вы легко можете создать DataFrame.

### Преобразование списка словарей в фрейм данных Pandas

В каждом словаре содержится запись в DataFrame, при этом ключи становятся столбцами. Давайте рассмотрим пример, где каждый словарь содержит все ключи:

```python
# Преобразование списка словарей в DataFrame
import pandas as pd

list_of_dicts = [
{'Имя': 'Ник', 'Возраст': 33, 'Местоположение': 'Торонто'},
{'Имя': 'Кейт', 'Возраст': 32, 'Местоположение': 'Лондон'},
{'Имя': 'Иван', 'Возраст': 36, 'Местоположение': 'Лондон'}]

df = pd.DataFrame(list_of_dicts)

print(df)

# Возвращает:
#    Имя  Возраст Местоположение
# 0  Ник      33       Торонто
# 1 Кейт      32        Лондон
# 2 Иван      36        Лондон

```

Поскольку каждый словарь в списке содержит одинаковые ключи, мы можем использовать несколько различных методов для достижения этой цели. Другие следующие методы также будут работать:

```python
# Эти методы все производят один и тот же результат
df = pd.DataFrame(list_of_dicts)
df = pd.DataFrame.from_dict(list_of_dicts)
df = pd.DataFrame.from_records(list_of_dicts)
```

### Работа с отсутствующими ключами при преобразовании списка словарей в таблицу данных Pandas

Давайте теперь рассмотрим более сложный пример. В приведенном ниже примере мы будем использовать словари, один из которых будет отсутствовать ключ. Давайте используем метод `.from_dict()` для чтения списка, чтобы увидеть, как будут прочитаны данные:

```python
# Чтение словарей с отсутствующими ключами
import pandas as pd

list_of_dicts = [{'Имя': 'Ник', 'Возраст': 33, 'Местоположение': 'Торонто'},
{'Имя': 'Кейт', 'Возраст': 32, 'Местоположение': 'Лондон'},
{'Имя': 'Иван', 'Возраст': 36}]

df = pd.DataFrame.from_dict(list_of_dicts)

print(df)

# Возвращает:
#    Имя  Возраст Местоположение
# 0  Ник      33       Торонто
# 1 Кейт      32        Лондон
# 2 Иван      36           NaN
```

Этот метод возвращает ту же версию, даже если вы используете конструктор `pd.DataFrame()`, метод `.from_dict()` или метод `.from_records()`. Любой словарь, в котором отсутствует ключ, вернет отсутствующее значение, `NaN`.

### Чтение только некоторых столбцов при преобразовании списка словарей в таблицу данных Pandas

Часто бывают случаи, когда вам необходимо прочитать словари в Pandas DataFrame, но при этом интересуют только некоторые столбцы. В таком случае можно использовать параметр `columns=`. Обратите внимание, что этот параметр **доступен только в конструкторе `pd.DataFrame()` и методе `pd.DataFrame.from_records()`**. Использование этого параметра в методе `pd.DataFrame.from_dict()` приведет к возникновению `ValueError`.

Давайте загрузим тот же список словарей, но прочитаем только два столбца:

```python
# Чтение только подмножества столбцов
import pandas as pd

list_of_dicts = [{'Имя': 'Ник', 'Возраст': 33, 'Местоположение': 'Торонто'},
{'Имя': 'Кейт', 'Возраст': 32, 'Местоположение': 'Лондон'},
{'Имя': 'Иван', 'Возраст': 36}]

df = pd.DataFrame.from_records(list_of_dicts, columns=['Имя', 'Возраст'])
# То же самое: df = pd.DataFrame(list_of_dicts, columns=['Имя', 'Возраст'])

print(df)

# Возвращает:
#    Имя  Возраст
# 0  Ник      33
# 1 Кейт      32
# 2 Иван      36
```

### Установка индекса при преобразовании списка словарей в таблицу данных Pandas

При создании DataFrame вы можете задать два различных типа индексов:

1. Индекс DataFrame, который не является частью читаемых данных (например, 1, 2, 3), или
2. Выберите столбец данных в качестве индекса DataFrame.

Давайте рассмотрим первый пример использования. Для этого мы можем полагаться только на конструктор `pd.DataFrame()` и метод `pd.DataFrame.from_records()`. Чтобы передать произвольный индекс, мы можем использовать параметр `index=`, чтобы передать список значений.

Давайте посмотрим, как это делается в Pandas:

```python
# Установка индекса при чтении списка словарей
import pandas as pd

list_of_dicts = [{'Имя': 'Ник', 'Возраст': 33, 'Местоположение': 'Торонто'},
{'Имя': 'Кейт', 'Возраст': 32, 'Местоположение': 'Лондон'},
{'Имя': 'Иван', 'Возраст': 36, 'Местоположение': 'Нью-Йорк'}]

df = pd.DataFrame.from_records(list_of_dicts, index=['Сотрудник_001', 'Сотрудник_002', 'Сотрудник_003'])
# То же самое: df = pd.DataFrame(list_of_dicts, index=['Сотрудник_001', 'Сотрудник_002', 'Сотрудник_003'])

print(df)

# Возвращает:
#                Имя  Возраст Местоположение
# Сотрудник_001  Ник      33       Торонто
# Сотрудник_002 Кейт      32        Лондон
# Сотрудник_003 Иван      36      Нью-Йорк

```

Чтобы прочитать список словарей и установить индекс на основе одного из ключей, мы можем использовать любой из трех описанных выше методов. Хотя Pandas напрямую не предоставляет параметр для этого, мы можем использовать метод `.set_index()`, чтобы достичь желаемого.

Давайте прочитаем наши данные и используем столбец `'Name'` в качестве индекса:

```python
# Установка столбца в качестве индекса
import pandas as pd

list_of_dicts = [{'Имя': 'Ник', 'Возраст': 33, 'Местоположение': 'Торонто'},
{'Имя': 'Кейт', 'Возраст': 32, 'Местоположение': 'Лондон'},
{'Имя': 'Иван', 'Возраст': 36, 'Местоположение': 'Нью-Йорк'}]

df = pd.DataFrame(list_of_dicts).set_index('Имя')
# То же самое: df = pd.DataFrame.from_dict(list_of_dicts).set_index('Имя')
# То же самое: df = pd.DataFrame.from_records(list_of_dicts).set_index('Имя')

print(df)

# Возвращает:
#       Возраст Местоположение
# Имя                          
# Ник         33       Торонто
# Кейт        32        Лондон
# Иван        36      Нью-Йорк

```

В заключительном разделе вы узнаете, как использовать функцию `json_normalize()` для чтения списка вложенных словарей в DataFrame Pandas.

### json\_normalize: чтение вложенных словарей в таблицу данных Pandas

При загрузке данных из разных источников, таких как веб-API, вам может быть возвращен список вложенных словарей. При чтении этих списков словарей с помощью показанных выше методов вложенные словари просто будут возвращены как словари в столбце.

Однако во многих случаях вы захотите, чтобы каждое из этих полей возвращало свой собственный столбец. Для этого мы можем использовать функцию `pd.json_normalize()`

Давайте рассмотрим пример, где словари в нашем списке являются вложенными, и используем функцию json\_normalize для их преобразования в DataFrame:

```python
# Преобразование списка вложенных словарей в DataFrame
import pandas as pd

list_of_dicts = [
    {'Имя': 'Ник', 'Возраст': 33, 'Местоположение': {'Город': 'Торонто', 'Страна': 'Канада'}},
    {'Имя': 'Кейт', 'Возраст': 32, 'Местоположение': {'Город': 'Лондон', 'Страна': 'Великобритания'}},
    {'Имя': 'Иван', 'Возраст': 36, 'Местоположение': {'Город': 'Нью-Йорк', 'Страна': 'США'}}
]

df = pd.json_normalize(list_of_dicts)

print(df)

# Возвращает:
#    Имя  Возраст Местоположение.Город Местоположение.Страна
# 0  Ник      33              Торонто               Канада
# 1 Кейт      32               Лондон       Великобритания
# 2 Иван      36             Нью-Йорк                  США

```

### Заключение

В этом учебнике вы узнали, как считывать список словарей в DataFrame Pandas. Вы узнали, как использовать четыре разных способа для достижения этого. Также вы научились считывать только подмножество столбцов, обрабатывать отсутствующие данные и как установить индекс. Наконец, вы узнали, как считывать список вложенных словарей в ваш DataFrame Pandas.

### Дополнительные ресурсы

Чтобы узнать больше о смежных темах, ознакомьтесь с нижеследующими руководствами:

* Словари Python: полный обзор
* Индекс сброса Pandas: как сбросить индекс Pandas
* Индекс переименования Pandas: как переименовать индекс Dataframe Pandas
* [Официальная документация Pandas json\_normalize](https://pandas.pydata.org/docs/reference/api/pandas.json_normalize.html)
