Преобразование списка словарей в Pandas DataFrame

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

К концу этого руководства вы научитесь следующему:

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

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

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

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

Содержание

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

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

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

DataFrame()

Да

Да

Да

No

from_dict()

Да

Да

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

No

from_records()

Да

Да

Да

No

json_normalize()

Да

Да

Да

Да

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

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

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

# Converting a List of Dictionaries to a 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'}]

df = pd.DataFrame(list_of_dicts)

print(df)

# Returns:
#    Name  Age Location
# 0   Nik   33  Toronto
# 1  Kate   32   London
# 2  Evan   36   London

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

# These methods all produce the same result
df = pd.DataFrame(list_of_dicts)
df = pd.DataFrame.from_dict(list_of_dicts)
df = pd.DataFrame.from_records(list_of_dicts)

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

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

# Reading Dictionaries with Missing Keys
import pandas as pd

list_of_dicts = [{'Name': 'Nik', 'Age': 33, 'Location': 'Toronto'},
{'Name': 'Kate', 'Age': 32, 'Location': 'London'},
{'Name': 'Evan', 'Age': 36}]

df = pd.DataFrame.from_dict(list_of_dicts)

print(df)

# Returns:
#    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 DataFrame, но при этом вы хотите прочитать только подмножество столбцов. В этом случае вы можете использовать параметр columns=. Обратите внимание, что этот параметр **доступен только в конструкторе pd.DataFrame() и методе pd.DataFrame.from_records(). Использование этого параметра в методе pd.DataFrame.from_dict() вызовет ошибку ValueError.

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

# Reading only a subset of columns
import pandas as pd

list_of_dicts = [{'Name': 'Nik', 'Age': 33, 'Location': 'Toronto'},
{'Name': 'Kate', 'Age': 32, 'Location': 'London'},
{'Name': 'Evan', 'Age': 36}]

df = pd.DataFrame.from_records(list_of_dicts, columns=['Name', 'Age'])
# Same as: df = pd.DataFrame(list_of_dicts, columns=['Name', 'Age'])

print(df)

# Returns:
#    Name  Age
# 0   Nik   33
# 1  Kate   32
# 2  Evan   36

Установка индекса при преобразовании списка словарей в DataFrame Pandas

Есть два разных типа индексов, которые вы можете установить при создании DataFrame:

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

  2. Индекс DataFrame из данных, которые вы читаете (например, один из столбцов)

Рассмотрим первый случай использования. Для этого мы можем рассчитывать только на конструктор pd.DataFrame() и метод pd.DataFrame.from_records(). Чтобы передать произвольный индекс, мы можем использовать параметр index=, передав список значений.

Давайте посмотрим, как это делается в Pandas:

# Setting an index when reading a list of dictionaries
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'}]

df = pd.DataFrame.from_records(list_of_dicts, index=['Employee_001', 'Employee_002', 'Employee_003'])
# Same as: df = pd.DataFrame(list_of_dicts, index=['Employee_001', 'Employee_002', 'Employee_003'])

print(df)

# Returns:
#               Name  Age  Location
# Employee_001   Nik   33   Toronto
# Employee_002  Kate   32    London
# Employee_003  Evan   36  New York

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

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

# Setting a column as an index
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'}]

df = pd.DataFrame(list_of_dicts).set_index('Name')
# Same as: df = pd.DataFrame.from_dict(list_of_dicts).set_index('Name')
# Same as: df = pd.DataFrame.from_records(list_of_dicts).set_index('Name')

print(df)

# Returns:
#       Age  Location
# Name               
# Nik    33   Toronto
# Kate   32    London
# Evan   36  New York

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

json_normalize: Чтение Вложенных Словарей в Pandas DataFrame

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

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

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

# Convert a List of Nested Dictionaries to a 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'}}
]

df = pd.json_normalize(list_of_dicts)

print(df)

# Returns:
#    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