> 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/uchebniki-po-pandas-i-numpy/pandas/preobrazovanie-dataframe-pandas-v-slovar.md).

# Преобразование DataFrame Pandas в Словарь

В этом посте вы узнаете, **как использовать Python для преобразования** [**Pandas DataFrame**](/neural/uchebniki-po-pandas-i-numpy/pandas/vvedenie-v-pandas-dlya-data-science.md) **в** [**словарь**.](/neural/python/python-dictionaries/ponimanie-slovarya-python-s-primerami.md) Так как Pandas DataFrames являются сложными структурами данных, существует множество различных способов это сделать. Этот пост исследует все различные опции, которые предлагает Pandas! Например, Pandas позволяет вам преобразовать DataFrame в список словарей или словарь сопоставлений столбцов и значений.

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

* Как работает метод Pandas `.to_dict()`
* Как настроить вывод метода
* Как преобразовать в словарь только подмножество столбцов с помощью функции `zip()`

Оглавление

* [Понимание метода Pandas `.to_dict()`](#ponimanie-metoda-pandas-.to_dict)
* [Загрузка образца DataFrame Pandas](#zagruzka-obrazca-dataframe-pandas)
* [Преобразование фрейма данных Pandas в словарь](#preobrazovanie-freima-dannykh-pandas-v-slovar)
* [Преобразование DataFrame Pandas в словарь значений столбцов](#preobrazovanie-dataframe-pandas-v-slovar-znachenii-stolbcov)
* [Преобразование фрейма данных Pandas в словарь значений рядов](#preobrazovanie-freima-dannykh-pandas-v-slovar-znachenii-ryadov)
* [Преобразование таблицы данных Pandas в индекс словаря, столбцы и данные](#preobrazovanie-tablicy-dannykh-pandas-v-indeks-slovarya-stolbcy-i-dannye)
* [Преобразование фрейма данных Pandas в список словарей](#preobrazovanie-freima-dannykh-pandas-v-spisok-slovarei)
* П[реобразование фрейма данных Pandas в словарь индексов и значений](#preobrazovanie-freima-dannykh-pandas-v-slovar-indeksov-i-znachenii)
* [Преобразование двух серий (столбцов) Pandas в словарь](#preobrazovanie-dvukh-serii-stolbcov-pandas-v-slovar)
* [Заключение](#zaklyuchenie)
* [Дополнительные ресурсы](#dopolnitelnye-resursy)

### Понимание метода Pandas `.to_dict()`

Перед тем как погрузиться в применение метода `.to_dict()` библиотеки Pandas, давайте рассмотрим, как выглядит этот метод:

```python
# Понимание метода .to_dict() в Pandas
import pandas as pd

# Создание пустого DataFrame
df = pd.DataFrame()

# Преобразование DataFrame в словарь с помощью метода .to_dict()
# Параметры метода:
# - orient: ориентация словаря (в данном случае 'dict' - словарь, ключами которого являются столбцы, а значениями - словари с индексами и значениями)
# - into: тип словаря, в который будет выполнено преобразование (в данном случае <class 'dict'> - обычный словарь Python)
df.to_dict(orient='dict', into=dict)
```

The `orient=` параметр принимает семь различных аргументов, каждый из которых предлагает вам разные способы настройки результирующего словаря. Это руководство исследует все их! Давайте погрузимся в то, как использовать метод.

### Загрузка образца DataFrame Pandas

Если вы хотите следовать за этим учебным пособием шаг за шагом, я предоставил пример Pandas DataFrame в блоке кода ниже. DataFrame намеренно сделан простым, чтобы лучше видеть, что происходит.

```python
# Создание DataFrame с данными о имени, возрасте и оценке
df = pd.DataFrame({
    'Name': ['Nik', 'Evan', 'Kate'],
    'Age': [33, 32, 33],
    'Score': [90, 95, 100]
})

print(df)

# Возвращает:
#    Name  Age  Score
# 0   Nik   33     90
# 1  Evan   32     95
# 2  Kate   33    100
```

Из приведенного выше блока кода видно, что образец DataFrame Pandas содержит три столбца и три записи. Теперь, когда DataFrame был загружен, давайте посмотрим, как вы можете использовать метод `.to_dict()` для преобразования DataFrame в словарь.

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

По умолчанию метод `.to_dict()` объекта DataFrame в Pandas возвращает словарь, где ключами являются названия столбцов, а значениями — соответствия `index:record`. Этот процесс более информативен, когда ваши индексы имеют особое значение, а не являются произвольными числами.

Давайте рассмотрим, что возвращает метод Pandas `to_dict()` с аргументами по умолчанию:

```python
# Преобразование DataFrame в словарь в Pandas
df = pd.DataFrame({
    'Name': ['Nik', 'Evan', 'Kate'],
    'Age': [33, 32, 33],
    'Score': [90, 95, 100]
})

print(df.to_dict())

# Возвращает:
# {'Name': {0: 'Nik', 1: 'Evan', 2: 'Kate'},
#  'Age': {0: 33, 1: 32, 2: 33},
#  'Score': {0: 90, 1: 95, 2: 100}}
```

В следующих разделах вы узнаете, как настроить метод для возврата словарей с различной структурой.

### Преобразование DataFrame Pandas в словарь значений столбцов

Чтобы создать словарь значений столбцов с использованием метода to\_dict DataFrame в Pandas, вы можете передать в качестве аргумента 'list'. Это создаст пары ключ-значение из названий столбцов и упорядоченный список значений столбцов.

Let’s see what this looks like:

```python
# Преобразование DataFrame в словарь, содержащий значения столбцов в списке
df = pd.DataFrame({
    'Name': ['Nik', 'Evan', 'Kate'],
    'Age': [33, 32, 33],
    'Score': [90, 95, 100]
})

print(df.to_dict('list'))

# Возвращает:
# {'Name': ['Nik', 'Evan', 'Kate'], 'Age': [33, 32, 33], 'Score': [90, 95, 100]}
```

В следующем разделе вы научитесь создавать очень похожий словарь, используя объекты Series из библиотеки Pandas, вместо списков.

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

Аналогичным образом можно преобразовать Pandas DataFrame в словарь, где ключами будут названия столбцов, а значениями - Pandas Series. Это можно сделать, передав строку `'series'` в качестве аргумента orient в метод.

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

```python
# Преобразование DataFrame в словарь, содержащий значения столбцов в объектах Series
df = pd.DataFrame({
    'Name': ['Nik', 'Evan', 'Kate'],
    'Age': [33, 32, 33],
    'Score': [90, 95, 100]
})

print(df.to_dict('series'))

# Возвращает:
# {'Name': 0     Nik
#  1    Evan
#  2    Kate
#  Name: Name, dtype: object,
#  'Age': 0    33
#  1    32
#  2    33
#  Name: Age, dtype: int64,
#  'Score': 0     90
#  1     95
#  2    100
#  Name: Score, dtype: int64}
```

В следующем разделе вы узнаете, как разделить индексы, имена столбцов и данные на словарь.

### Преобразование таблицы данных Pandas в индекс словаря, столбцы и данные

При использовании аргумента `'split'` в методе to\_dict библиотеки Pandas можно создать словарь, который разделяет индекс, столбцы и данные на отдельные ключи в результирующем словаре. Метод вернет следующий словарь:`{'index': list, 'columns': list, 'data': list of lists}`.

Это может быть полезно, когда вам нужно передавать элементы между структурами данных, где вы можете подавать заголовки столбцов и индексы отдельно от их данных.

```python
# Преобразование DataFrame в словарь, содержащий индекс, названия столбцов и данные
df = pd.DataFrame({
    'Name': ['Nik', 'Evan', 'Kate'],
    'Age': [33, 32, 33],
    'Score': [90, 95, 100]
})

print(df.to_dict('split'))

# Возвращает:
# {'index': [0, 1, 2],
#  'columns': ['Name', 'Age', 'Score'],
#  'data': [['Nik', 33, 90], ['Evan', 32, 95], ['Kate', 33, 100]]}
```

Чтобы расширить эту функциональность, вы также можете передать в метод значение `'tight'`, чтобы получить более подробный словарь. Полученный словарь также включает названия индексов и столбцов, если они были указаны отдельно. Этот аргумент доступен начиная с версии Pandas 1.4.0.

```python
# Преобразование DataFrame Pandas в словарь индекса, столбцов и данных (часть 2)
df = pd.DataFrame({
    'Name': ['Nik', 'Evan', 'Kate'],
    'Age': [33, 32, 33],
    'Score': [90, 95, 100]
})

print(df.to_dict('tight'))

# Возвращает:
# {'index': [0, 1, 2],
#  'columns': ['Name', 'Age', 'Score'],
#  'data': [['Nik', 33, 90], ['Evan', 32, 95], ['Kate', 33, 100]],
#  'index_names': [None],
#  'column_names': [None]}
```

В следующем разделе вы узнаете, как преобразовать Pandas DataFrame в список словарей.

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

Одна из наиболее распространенных реализаций метода to\_dict в Pandas - это преобразование DataFrame в список словарей. Это наилучшим образом соответствует формату JSON, где вы можете легко передавать данные между языками.

При передаче `'records'` в метод создается список, который содержит один словарь для каждой записи в DataFrame. Давайте посмотрим, как это выглядит:

```python
# Преобразование DataFrame в список словарей
df = pd.DataFrame({
    'Name': ['Nik', 'Evan', 'Kate'],
    'Age': [33, 32, 33],
    'Score': [90, 95, 100]
})

print(df.to_dict('records'))

# Возвращает:
# [{'Name': 'Nik', 'Age': 33, 'Score': 90},
#  {'Name': 'Evan', 'Age': 32, 'Score': 95},
#  {'Name': 'Kate', 'Age': 33, 'Score': 100}]
```

Полученный список будет упорядочен в соответствии с текущим порядком DataFrame. Если вам нужно включить индекс в словари, вы можете сначала [сбросить индекс DataFrame](https://datagy.io/pandas-reset-index/). Это позволит включить индекс в список словарей:

```python
# Преобразование DataFrame в список словарей с индексами
df = pd.DataFrame({
    'Name': ['Nik', 'Evan', 'Kate'],
    'Age': [33, 32, 33],
    'Score': [90, 95, 100]
})
df.reset_index(inplace=True)  # Сброс индексов исходного DataFrame
print(df.to_dict('records'))

# Возвращает:
# [{'index': 0, 'Name': 'Nik', 'Age': 33, 'Score': 90}, 
# {'index': 1, 'Name': 'Evan', 'Age': 32, 'Score': 95}, 
# {'index': 2, 'Name': 'Kate', 'Age': 33, 'Score': 100}]
```

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

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

В этом разделе вы узнаете, как преобразовать DataFrame Pandas в словарь, где индексы являются ключами, а значения - словарем из имен столбцов и значений записей. Это можно выполнить, передав значение `'index'` в метод `to_dict`

```python
# Преобразование DataFrame в словарь с индексами и значениями
df = pd.DataFrame({
    'Name': ['Nik', 'Evan', 'Kate'],
    'Age': [33, 32, 33],
    'Score': [90, 95, 100]
})

print(df.to_dict('index'))

# Возвращает:
# {0: {'Name': 'Nik', 'Age': 33, 'Score': 90},
#  1: {'Name': 'Evan', 'Age': 32, 'Score': 95},
#  2: {'Name': 'Kate', 'Age': 33, 'Score': 100}}
```

Этот подход приобретает еще больший смысл, когда индексы содержат более значимые значения.

### Преобразование двух серий (столбцов) Pandas в словарь

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

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

```python
# Преобразование двух столбцов DataFrame в словарь
import pandas as pd

df = pd.DataFrame({
    'Name': ['Nik', 'Evan', 'Kate'],
    'Age': [33, 32, 33],
    'Score': [90, 95, 100]
})

# Использование функции zip для создания словаря, где ключами будут значения из столбца 'Name', а значениями - из столбца 'Age'
ages = dict(zip(df['Name'], df['Age']))
print(ages)

# Возвращает:
# {'Nik': 33, 'Evan': 32, 'Kate': 33}
```

Мы передаем объект zip между двумя столбцами в функцию-конструктор `dict()`. Это позволяет нам легко преобразовать итерируемый объект в словарь.

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

В этом посте вы узнали, как преобразовать DataFrame Pandas в словарь. Pandas предлагает множество различных способов для выполнения этой задачи. Это исчерпывающее руководство покрыло все различные способы, с помощью которых можно осуществить это преобразование. Сначала вы научились использовать метод `.to_dict()`. Затем вы также узнали, как создать словарь из двух столбцов Pandas, используя функцию `zip()`

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

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

* [Преобразование фрейма данных Pandas в список](https://bemind.gitbook.io/neural/v/uchebniki/uchebniki-po-pandas-i-numpy/pandas/preobrazovanie-dataframe-pandas-v-slovar#preobrazovanie-freima-dannykh-pandas-v-spisok-slovarei)
* [Преобразование DataFrame Pandas в JSON](https://bemind.gitbook.io/neural/v/uchebniki/uchebniki-po-pandas-i-numpy/pandas/konvertaciya-pandas-dataframe-v-json)
* Преобразование DataFrame Pandas в массив NumPy
* [Преобразование фрейма данных Pandas в файл Pickle](/neural/uchebniki-po-pandas-i-numpy/pandas/preobrazovanie-dataframe-pandas-v-fail-pickle.md)
* [Преобразование списка словарей в фрейм данных Pandas](https://bemind.gitbook.io/neural/v/uchebniki/python/python-lists/konvertaciya-spiska-slovarei-v-pandas-dataframe)
* [Как добавить новый столбец в фрейм данных Pandas](https://bemind.gitbook.io/neural/v/uchebniki/uchebniki-po-pandas-i-numpy/pandas/kak-dobavit-novyi-stolbec-v-dataframe-pandas)
* [Официальная документация: Pandas .to\_dict()](https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.to_dict.html)
* [Ссылка на код статьи](https://github.com/BeMindYou/Lesson/blob/main/Pandas/%D0%9F%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_DataFrame_Pandas_%D0%B2_%D0%A1%D0%BB%D0%BE%D0%B2%D0%B0%D1%80%D1%8C.ipynb)
