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 с помощью словаря