# Конвертация списка словарей в 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)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://bemind.gitbook.io/neural/python/python-lists/konvertaciya-spiska-slovarei-v-pandas-dataframe.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
