python - Pandas DataFrame to List of Dictionaries


Translate

I have the following DataFrame:

customer    item1      item2    item3
1           apple      milk     tomato
2           water      orange   potato
3           juice      mango    chips

which I want to translate it to list of dictionaries per row

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'}]

All Answers
  • Translate

    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 loop
    
    In [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]: 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'}]
    

  • Translate

    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'}]
    

  • Translate

    As an extension to John Galt's answer -

    For the following DataFrame,

       customer  item1   item2   item3
    0         1  apple    milk  tomato
    1         2  water  orange  potato
    2         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'}}