# Преобразование 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)


---

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