Конвертация списка словарей в Pandas DataFrame

В этом руководстве вы узнаете, как преобразовать список словарей Python в Pandas DataFrame. Pandas предоставляет несколько способов для преобразования словарей в DataFrame. Вы узнаете, как использовать метод Pandas from_dict, конструктор DataFrame и функцию json

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

  • Как преобразовать список словарей в DataFrame Pandas

  • Как работать с разными наборами столбцов в словарях

  • Как установить индекс при преобразовании списка словарей в DataFrame

  • Как преобразовать вложенные словари в DataFrame Pandas

Оглавление

Краткое изложение методов

Ниже приведена таблица, в которой рассматриваются различные способы чтения списка словарей в DataFrame Pandas. Каждый из них подробно рассматривается в учебнике:

Имя методаРаботает с отсутствующими ключамиЧитать только некоторые столбцыУстановить индексЧтение вложенных словарей

DataFrame()

Да

Да

Да

Нет

from_dict()

Да

Да

Только используя.set_index()

Нет

from_records()

Да

Да

Да

Нет

json_normalize()

Да

Да

Да

Да

В этом разделе вы узнаете, как преобразовать список словарей в DataFrame с использованием класса Pandas DataFrame. Передавая список словарей, вы легко можете создать DataFrame.

Преобразование списка словарей в фрейм данных Pandas

Каждый словарь будет представлять собой запись в DataFrame, а ключи станут столбцами. Давайте рассмотрим пример, где каждый словарь содержит каждый ключ:

import pandas as pd

# Создаем список словарей с данными
list_of_dicts = [
    {'Name': 'Nik', 'Age': 33, 'Location': 'Toronto'},  # Первый словарь с данными о Нике
    {'Name': 'Kate', 'Age': 32, 'Location': 'London'},  # Второй словарь с данными о Кейт
    {'Name': 'Evan', 'Age': 36, 'Location': 'London'}   # Третий словарь с данными о Эване
]

# Преобразуем список словарей в DataFrame
df = pd.DataFrame(list_of_dicts)

# Печатаем DataFrame в консоль
print(df)

# Выводит DataFrame:
#    Name  Age Location
# 0   Nik   33  Toronto
# 1  Kate   32   London
# 2  Evan   36   London

Поскольку каждый словарь в списке содержит одинаковые ключи, мы можем использовать множество различных методов для достижения этой задачи. Следующие методы также будут работать:

# Все эти методы дают одинаковый результат
df = pd.DataFrame(list_of_dicts)                  # Создаем DataFrame из списка словарей
df = pd.DataFrame.from_dict(list_of_dicts)         # Создаем DataFrame из словаря
df = pd.DataFrame.from_records(list_of_dicts)      # Создаем DataFrame из записей (records) в списке словарей

Работа с отсутствующими ключами при преобразовании списка словарей в таблицу данных Pandas

Давайте теперь рассмотрим более сложный пример. В примере ниже мы предоставим словари, где в одном словаре будет отсутствовать ключ. Используем метод .from_dict(), чтобы прочитать список и увидеть, как будут считываться данные:

# Чтение словарей с отсутствующими ключами
import pandas as pd

# Создаем список словарей с данными, один из словарей имеет отсутствующий ключ 'Location'
list_of_dicts = [{'Name': 'Nik', 'Age': 33, 'Location': 'Toronto'},  # Словарь с данными о Нике
                 {'Name': 'Kate', 'Age': 32, 'Location': 'London'},  # Словарь с данными о Кейт
                 {'Name': 'Evan', 'Age': 36}]  # Словарь с данными об Эване, без указания местоположения

# Преобразуем список словарей в DataFrame
df = pd.DataFrame.from_dict(list_of_dicts)

# Выводим DataFrame в консоль
print(df)

# Возвращает:
#    Name  Age Location
# 0   Nik   33  Toronto
# 1  Kate   32   London
# 2  Evan   36      NaN

Этот метод возвращает ту же версию, даже если вы используете конструктор pd.DataFrame(), метод .from_dict() или метод .from_records(). Любой словарь, в котором отсутствует ключ, вернет значение NaN.

Чтение только некоторых столбцов при преобразовании списка словарей в таблицу данных Pandas

Могут быть случаи, когда вы хотите преобразовать словари в DataFrame Pandas, но при этом загрузить только подмножество столбцов. В этом случае можно использовать параметр columns=. Обратите внимание, что этот параметр доступен только в конструкторе pd.DataFrame() и методе pd.DataFrame.from_records(). Использование этого параметра в методе pd.DataFrame.from_dict() приведет к ошибке ValueError.

Давайте загрузим тот же список словарей, но будем считывать только два столбца:

# Чтение только подмножества столбцов
import pandas as pd

# Создаем список словарей с данными
list_of_dicts = [{'Name': 'Nik', 'Age': 33, 'Location': 'Toronto'},  # Словарь с данными о Нике
                 {'Name': 'Kate', 'Age': 32, 'Location': 'London'},  # Словарь с данными о Кейт
                 {'Name': 'Evan', 'Age': 36}]  # Словарь с данными об Эване

# Создаем DataFrame из записей (records) в списке словарей, указывая столбцы для чтения
df = pd.DataFrame.from_records(list_of_dicts, columns=['Name', 'Age'])
# То же самое: df = pd.DataFrame(list_of_dicts, columns=['Name', 'Age'])

# Выводим DataFrame в консоль
print(df)

# Возвращает:
#    Name  Age
# 0   Nik   33
# 1  Kate   32
# 2  Evan   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 = [{'Name': 'Nik', 'Age': 33, 'Location': 'Toronto'},  # Словарь с данными о Нике
                 {'Name': 'Kate', 'Age': 32, 'Location': 'London'},  # Словарь с данными о Кейт
                 {'Name': 'Evan', 'Age': 36, 'Location': 'New York'}]  # Словарь с данными об Эване

# Создаем DataFrame из записей (records) в списке словарей, указывая индексы для строк
df = pd.DataFrame.from_records(list_of_dicts, index=['Employee_001', 'Employee_002', 'Employee_003'])
# То же самое: df = pd.DataFrame(list_of_dicts, index=['Employee_001', 'Employee_002', 'Employee_003'])

# Выводим DataFrame в консоль
print(df)

# Возвращает:
#               Name  Age  Location
# Employee_001   Nik   33   Toronto
# Employee_002  Kate   32    London
# Employee_003  Evan   36  New York

Для чтения списка словарей и установки индекса на основе одного из ключей, мы можем использовать любой из трех вышеупомянутых методов. Хотя Pandas напрямую не предоставляет параметр для этого, мы можем использовать метод .set_index() для достижения этой цели.

Давайте прочитаем наши данные и используем столбец 'Name' в качестве индекса:

# Установка столбца в качестве индекса
import pandas as pd

# Создаем список словарей с данными
list_of_dicts = [{'Name': 'Nik', 'Age': 33, 'Location': 'Toronto'},  # Словарь с данными о Нике
                 {'Name': 'Kate', 'Age': 32, 'Location': 'London'},  # Словарь с данными о Кейт
                 {'Name': 'Evan', 'Age': 36, 'Location': 'New York'}]  # Словарь с данными об Эване

# Создаем DataFrame из списка словарей и устанавливаем столбец 'Name' в качестве индекса
df = pd.DataFrame(list_of_dicts).set_index('Name')
# То же самое: df = pd.DataFrame.from_dict(list_of_dicts).set_index('Name')
# То же самое: df = pd.DataFrame.from_records(list_of_dicts).set_index('Name')

# Выводим DataFrame в консоль
print(df)

# Возвращает:
#       Age  Location
# Name               
# Nik    33   Toronto
# Kate   32    London
# Evan   36  New York

В последнем разделе вы узнаете, как использовать функцию json_normalize() для чтения списка вложенных словарей в Pandas DataFrame.

json_normalize: чтение вложенных словарей в кадр данных Pandas

При загрузке данных из разных источников, таких как веб-API, вы можете получить список вложенных словарей. При чтении этих списков словарей с использованием приведенных выше методов, вложенные словари будут просто возвращены как словари в колонке.

Тем не менее, во многих случаях, вы захотите, чтобы каждое из этих полей возвращалось в собственный столбец. Для этого мы можем использовать функцию pd.json_normalize()

Рассмотрим пример, где словари в нашем списке вложены и используются функции json_normalize для преобразования его в DataFrame:

# Преобразование списка вложенных словарей в DataFrame
import pandas as pd

# Создаем список словарей с данными, где вложенный словарь для местоположения
list_of_dicts = [
    {'Name': 'Nik', 'Age': 33, 'Location': {'City': 'Toronto', 'Country': 'Canada'}},  # Данные о Нике
    {'Name': 'Kate', 'Age': 32, 'Location': {'City': 'London', 'Country': 'UK'}},  # Данные о Кейт
    {'Name': 'Evan', 'Age': 36, 'Location': {'City': 'New York', 'Country': 'USA'}}  # Данные об Эване
]

# Преобразуем список в DataFrame с использованием pd.json_normalize(), чтобы обработать вложенные словари
df = pd.json_normalize(list_of_dicts)

# Выводим DataFrame в консоль
print(df)

# Возвращает:
#    Name  Age Location.City Location.Country
# 0   Nik   33       Toronto           Canada
# 1  Kate   32        London               UK
# 2  Evan   36      New York              USA

Заключение

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

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

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

Last updated