Конвертация списка словарей в 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 вы можете задать два различных типа индексов:

  1. Индекс DataFrame, который не является частью читаемых данных (например, 1, 2, 3), или

  2. Выберите столбец данных в качестве индекса 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.

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

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

Last updated