Pandas DataFrame to List of Dictionaries
Use df.to_dict('records')
-- gives the output without having to transpose externally.
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'}]
Edit
As John Galt mentions in his answer , you should probably instead use df.to_dict('records')
. It's faster than transposing manually.
In [20]: timeit df.T.to_dict().values()1000 loops, best of 3: 395 µs per loopIn [21]: timeit df.to_dict('records')10000 loops, best of 3: 53 µs per loop
Original answer
Use df.T.to_dict().values()
, like below:
In [1]: dfOut[1]: customer item1 item2 item30 1 apple milk tomato1 2 water orange potato2 3 juice mango chipsIn [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'}]
As an extension to John Galt's answer -
For the following DataFrame,
customer item1 item2 item30 1 apple milk tomato1 2 water orange potato2 3 juice mango chips
If you want to get a list of dictionaries including the index values, you can do something like,
df.to_dict('index')
Which outputs a dictionary of dictionaries where keys of the parent dictionary are index values. In this particular case,
{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'}}