Как преобразовать pandas DataFrame в словарь списков с помощью to_dict ()? - PullRequest
1 голос
/ 09 марта 2020

Кажется, это простой вопрос, но я застрял из-за того, насколько хитро это дано в документации pandas.DataFrame.to_dict:

У меня есть следующий игрушечный пример pandas DataFrame с двумя столбцами, причем column2 - это столбец списков:

import pandas as pd

dict1 = {'column1': ['list1', 'list2', 'list3'], 'column2': [[367, 30, 847, 482, 887, 654, 347, 504, 413, 821], [754, 915, 622, 149, 279, 192, 312, 203, 742, 846], [586, 521, 470, 476, 693, 426, 746, 733, 528, 565]]}

df = pd.DataFrame(dict1)

print(df)
  column1                                            column2
0   list1  [367, 30, 847, 482, 887, 654, 347, 504, 413, 821]
1   list2  [754, 915, 622, 149, 279, 192, 312, 203, 742, 846]
2   list3  [586, 521, 470, 476, 693, 426, 746, 733, 528, 565]

Я хотел бы преобразовать этот pandas DataFrame в словарь, причем каждый ключ имеет значение column1, а значения - column2.

Это мой предпочтительный вывод:

{'list1': [367, 30, 847, 482, 887, 654, 347, 504, 413, 821], 
'list2': [754, 915, 622, 149, 279, 192, 312, 203, 742, 846], 
'list3': [586, 521, 470, 476, 693, 426, 746, 733, 528, 565]}

Используя .to_dict(), это кажется очень сложным.

Если я попытаюсь df.set_index('column1').T.to_dict(), я получу словарь с именами столбцов в словаре:

{'list1': {'column2': [367, 30, 847, 482, 887, 654, 347, 504, 413, 821]}, 
'list2': {'column2': [754, 915, 622, 149, 279, 192, 312, 203, 742, 846]}, 
'list3': {'column2': [586, 521, 470, 476, 693, 426, 746, 733, 528, 565]}}

Если я попытаюсь с to_dict("list"), я получу следующее:

{'list1': [[367, 30, 847, 482, 887, 654, 347, 504, 413, 821]], 
'list2': [[754, 915, 622, 149, 279, 192, 312, 203, 742, 846]], 
'list3': [[586, 521, 470, 476, 693, 426, 746, 733, 528, 565]]}

, что неверно, так как теперь значения списков списков, а не единого списка.

Если я попытаюсь to_dict("records"), вывод на самом деле будет одним списком, а не словарем:

[{'list1': [367, 30, 847, 482, 887, 654, 347, 504, 413, 821], 
'list2': [754, 915, 622, 149, 279, 192, 312, 203, 742, 846], 
'list3': [586, 521, 470, 476, 693, 426, 746, 733, 528, 565]}]

Есть ли еще одна простая команда для преобразования этого pandas DataFrame в словарь списков? Я чувствую, что что-то упустил.

Ответы [ 2 ]

1 голос
/ 09 марта 2020

Вы можете использовать zip():

>>> import pandas as pd
>>>
>>> dict1 = {'column1': ['list1', 'list2', 'list3'], 'column2': [[367, 30, 847, 482, 887, 654, 347, 504, 413, 821], [754, 915, 622, 149, 279, 192, 312, 203, 742, 846], [586, 521, 470, 476, 693, 426, 746, 733, 528, 565]]}
>>>
>>> df = pd.DataFrame(dict1)
>>>
>>>
>>> ur_dict = dict(zip(df['column1'], df['column2']))
>>> ur_dict
{'list1': [367, 30, 847, 482, 887, 654, 347, 504, 413, 821], 'list2': [754, 915, 622, 149, 279, 192, 312, 203, 742, 846], 'list3': [586, 521, 470, 476, 693, 426, 746, 733, 528, 565]}
>>>
1 голос
/ 09 марта 2020

Это то, что вы хотите:

df.set_index('column1')['column2'].to_dict()

Вывод:

{'list1': [367, 30, 847, 482, 887, 654, 347, 504, 413, 821],
 'list2': [754, 915, 622, 149, 279, 192, 312, 203, 742, 846],
 'list3': [586, 521, 470, 476, 693, 426, 746, 733, 528, 565]}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...