Преобразование словаря кортежей и списков в качестве ключевых значений в фрейм данных pandas

#python #pandas #dictionary #python-3.6

Вопрос:

У меня есть словарь с кортежами в качестве ключей и значениями в виде списков. Я хотел бы преобразовать его в фрейм данных pandas для последующего экспорта в виде таблицы Excel.

Может ли кто-нибудь предложить простой способ выполнения таблицы, как показано ниже? Я хотел бы, чтобы элементы в списке располагались в отдельных столбцах.

dict={(a,b):[1,2][4,5],(a,c):[7,8][1,3],(b,c):[1,8][1,3]}

K X Y
a,b 1 2
a,b 4 5
a,c 7 8
a,c 1 3
в,с 1 8
в,с 1 3

Попробовал это, но не получил желаемого результата: df=pd.DataFrame.from_dict(dict, orient='index').T

Ответ №1:

Воспользуйся:

 import pandas as pd

# toy data
dic = {("a", "b"): [[1, 2], [4, 5]], ("a", "c"): [[7, 8], [1, 3]], ("b", "c"): [[1, 8], [1, 3]]}

# un-ravel the data to create the rows of the DataFrame
data = [[key, *value] for key, values in dic.items() for value in values]

# actually create the DataFrame
df = pd.DataFrame(data, columns=["K", "X", "Y"])
print(df)
 

Выход

         K  X  Y
0  (a, b)  1  2
1  (a, b)  4  5
2  (a, c)  7  8
3  (a, c)  1  3
4  (b, c)  1  8
5  (b, c)  1  3
 

Выражение:

 data = [[key, *value] for key, values in dic.items() for value in values]
 

является ли понимание списка эквивалентным:

 data = []
for key, values in dic.items():
    for value in values:
        data.append([key, *value])
 

Ответ №2:

Проверьте, помогает ли это:

 import pandas as pd
dict={('a','b'):[[1,2],[4,5]],('a','c'):[[7,8],[1,3]],('b','c'):[[1,8],[1,3]]}
dt = []
for k,v in dict.items():
    for ls in v:
        dt.append([k,ls[0],ls[1]])

df = pd.DataFrame(dt,columns = ['Key','x','y'])

print (df)
 

Комментарии:

1. Спасибо, я уже пробовал это. Я получаю ошибку — AttributeError: объект «дикт» не имеет атрибута «добавить». В списках значений одного ключа в моем словаре нет запятой между ними.

2. @krem в любом случае, вы получили ожидаемый ответ, это хорошо