Pandas DataFrame в список словарей
У меня есть следующий фрейм данных:
customer item1 item2 item3 1 apple milk tomato 2 water orange potato 3 juice mango chips
который я хочу перевести его в списке словарей в строке
rows = [{'customer': 1, 'item1': 'apple', 'item2': 'milk', 'item3': 'tomato'},
{'customer': 2, 'item1': 'water', 'item2': 'orange', 'item3': 'potato'},
{'customer': 3, 'item1': 'juice', 'item2': 'mango', 'item3': 'chips'}]
3 ответа:
Edit
как Джон Галт упоминает в ответ , вы должны, вероятно, использовать вместо
df.to_dict('records')
. Это быстрее, чем перенос вручную.In [20]: timeit df.T.to_dict().values() 1000 loops, best of 3: 395 µs per loop In [21]: timeit df.to_dict('records') 10000 loops, best of 3: 53 µs per loop
оригинальный ответ
использовать
df.T.to_dict().values()
, как показано ниже:In [1]: df Out[1]: customer item1 item2 item3 0 1 apple milk tomato 1 2 water orange potato 2 3 juice mango chips In [2]: df.T.to_dict().values() Out[2]: [{'customer': 1.0, 'item1': 'apple', 'item2': 'milk', 'item3': 'tomato'}, {'customer': 2.0, 'item1': 'water', 'item2': 'orange', 'item3': 'potato'}, {'customer': 3.0, 'item1': 'juice', 'item2': 'mango', 'item3': 'chips'}]
использовать
df.to_dict('records')
-- дает выход без транспонировать внешне.In [2]: df.to_dict('records') Out[2]: [{'customer': 1L, 'item1': 'apple', 'item2': 'milk', 'item3': 'tomato'}, {'customer': 2L, 'item1': 'water', 'item2': 'orange', 'item3': 'potato'}, {'customer': 3L, 'item1': 'juice', 'item2': 'mango', 'item3': 'chips'}]
как расширение к Джон Галт ответ -
для следующего фрейма данных,
customer item1 item2 item3 0 1 apple milk tomato 1 2 water orange potato 2 3 juice mango chips
Если вы хотите получить список словарей, включая значения Индекса, вы можете сделать что-то вроде
df.to_dict('index')
который выводит словарь словарей, где ключи родительского словаря являются индексными значениями. В данном конкретном случае,
{0: {'customer': 1, 'item1': 'apple', 'item2': 'milk', 'item3': 'tomato'}, 1: {'customer': 2, 'item1': 'water', 'item2': 'orange', 'item3': 'potato'}, 2: {'customer': 3, 'item1': 'juice', 'item2': 'mango', 'item3': 'chips'}}