pandas数据框到词典列表
我有以下的DataFrame:
客户item1 item2 item3 1个苹果牛奶番茄 2水橙土豆 3汁芒果芯片
我想把它翻译成每行字典列表
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'}]
使用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'}]
正如John Galt在他的回答中提到的那样,你可能应该使用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.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'}]
作为John Galt的答案的延伸 –
对于以下DataFrame,
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'}}