Pandas: создайте dataframe из словаря разной длины


Вы можете использовать следующий базовый синтаксис для создания DataFrame pandas из словаря, записи которого имеют разную длину:

 import pandas as pd

df = pd. DataFrame (dict([(key, pd. Series (value)) for key, value in some_dict. items ()]))

Этот синтаксис преобразует список массивов словарей в список серий панд.

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

В следующем примере показано, как использовать этот синтаксис на практике.

Пример. Создайте DataFrame Pandas из словаря разной длины.

Предположим, у нас есть следующий словарь, содержащий записи разной длины:

 #create dictionary whose entries have different lengths
some_dict = dict(A=[2, 5, 5, 7, 8], B=[9, 3], C=[4, 4, 2])

#view dictionary
print (some_dict)

{'A': [2, 5, 5, 7, 8], 'B': [9, 3], 'C': [4, 4, 2]}

Если мы попытаемся использовать функцию from_dict() для преобразования этого словаря в DataFrame pandas, мы получим ошибку:

 import pandas as pd

#attempt to create pandas DataFrame from dictionary
df = pd. DataFrame . from_dict (some_dict)

ValueError : All arrays must be of the same length

Мы получаем сообщение об ошибке, сообщающее, что все массивы в словаре должны быть одинаковой длины.

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

 import pandas as pd

#create pandas DataFrame from dictionary
df = pd. DataFrame (dict([(key, pd. Series (value)) for key, value in some_dict. items ()]))

#view DataFrame
print (df)

   ABC
0 2 9.0 4.0
1 5 3.0 4.0
2 5 NaN 2.0
3 7 NaN NaN
4 8 NaN NaN

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

Если вы хотите заменить эти значения NaN другими значениями (например, нулем), вы можете использовать функцию replace() следующим образом:

 #replace all NaNs with zeros
df. replace (np. nan , 0, inplace= True )

#view updated DataFrame
print (df)

   ABC
0 2 9.0 4.0
1 5 3.0 4.0
2 5 0.0 2.0
3 7 0.0 0.0
4 8 0.0 0.0

Обратите внимание, что каждое значение NaN заменено нулем.

Не стесняйтесь использовать функцию replace() для замены значений NaN любым значением, которое вы хотите.

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

В следующих руководствах объясняется, как выполнять другие распространенные операции в pandas:

Pandas: как преобразовать DataFrame в словарь
Pandas: как переименовать столбцы с помощью словаря
Pandas: как заполнить значения NaN с помощью словаря

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *