Конвертация списка словарей в Pandas DataFrame
В этом учебнике вы научитесь преобразовывать список словарей Python в DataFrame Pandas. Pandas предлагает несколько способов преобразования словарей в DataFrame. Вы узнаете, как использовать метод from_dict
Pandas, конструктор DataFrame и функцию
К концу этого урока вы узнаете:
Как преобразовать список словарей в DataFrame Pandas
Как работать с разными наборами столбцов в словарях
Как установить индекс при преобразовании списка словарей в DataFrame
Как преобразовать вложенные словари в DataFrame Pandas
Оглавление
Краткое изложение методов
В таблице ниже приводятся различные способы чтения списка словарей в DataFrame Pandas. Каждый из этих методов рассмотрен детально в течение учебного пособия:
DataFrame()
Да
Да
Да
Нет
from_dict()
Да
Да
Только используя.set_index()
Нет
from_records()
Да
Да
Да
Нет
json_normalize()
Да
Да
Да
Да
В этом разделе вы узнаете, как преобразовать список словарей в объект DataFrame с использованием класса DataFrame
в Pandas. Передав список словарей, вы легко можете создать DataFrame.
Преобразование списка словарей в фрейм данных Pandas
В каждом словаре содержится запись в DataFrame, при этом ключи становятся столбцами. Давайте рассмотрим пример, где каждый словарь содержит все ключи:
# Преобразование списка словарей в 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 Лондон
Поскольку каждый словарь в списке содержит одинаковые ключи, мы можем использовать несколько различных методов для достижения этой цели. Другие следующие методы также будут работать:
# Эти методы все производят один и тот же результат
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()
для чтения списка, чтобы увидеть, как будут прочитаны данные:
# Чтение словарей с отсутствующими ключами
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
.
Давайте загрузим тот же список словарей, но прочитаем только два столбца:
# Чтение только подмножества столбцов
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 вы можете задать два различных типа индексов:
Индекс DataFrame, который не является частью читаемых данных (например, 1, 2, 3), или
Выберите столбец данных в качестве индекса DataFrame.
Давайте рассмотрим первый пример использования. Для этого мы можем полагаться только на конструктор pd.DataFrame()
и метод pd.DataFrame.from_records()
. Чтобы передать произвольный индекс, мы можем использовать параметр index=
, чтобы передать список значений.
Давайте посмотрим, как это делается в Pandas:
# Установка индекса при чтении списка словарей
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'
в качестве индекса:
# Установка столбца в качестве индекса
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:
# Преобразование списка вложенных словарей в 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
Last updated