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

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

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

  • Как работает метод Pandas .to_dict()

  • Как настроить вывод метода

  • Как преобразовать в словарь только подмножество столбцов с помощью функции zip()

Оглавление

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

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

# Понимание метода .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 намеренно сделан простым, чтобы лучше видеть, что происходит.

# Создание 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() с аргументами по умолчанию:

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

# Преобразование 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 для использования в других местах. Давайте посмотрим, как это выглядит:

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

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

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

# Преобразование 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. Давайте посмотрим, как это выглядит:

# Преобразование 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. Это позволит включить индекс в список словарей:

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

# Преобразование 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, которая позволяет последовательно итерировать по нескольким объектам. Давайте посмотрим, как это выглядит:

# Преобразование двух столбцов 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()

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

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

Last updated