Преобразование списка словарей в 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:
Индекс DataFrame, который не является частью данных, которые вы читаете (например, 1, 2, 3), или
Индекс 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.
Дополнительные ресурсы
Чтобы узнать больше по смежным темам, ознакомьтесь с руководствами ниже:
Словари Python: полный обзор
Индекс сброса Pandas: как сбросить индекс Pandas
Индекс переименования Pandas: как переименовать индекс Dataframe Pandas
Last updated