Преобразование DataFrame Pandas в Словарь
В этом посте вы узнаете, как использовать Python для преобразования Pandas DataFrame в словарь. Так как Pandas DataFrames являются сложными структурами данных, существует множество различных способов это сделать. Этот пост исследует все различные опции, которые предлагает Pandas! Например, Pandas позволяет вам преобразовать DataFrame в список словарей или словарь сопоставлений столбцов и значений.
К концу этого урока вы узнаете:
Как работает метод Pandas
.to_dict()
Как настроить вывод метода
Как преобразовать в словарь только подмножество столбцов с помощью функции
zip()
Оглавление
Понимание метода Pandas .to_dict()
.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()
Дополнительные ресурсы
Чтобы узнать больше о связанных темах, ознакомьтесь с обучающими материалами ниже:
Преобразование DataFrame Pandas в массив NumPy
Last updated