DataFrame到OrderedDicts列表-如何保留订单?

问题描述

当使用DataFrameOrderedDictto_dict转换为into时,我找不到找到保持记录顺序的方法。有没有一种方法可以不循环记录并手动转换?

DataFrame([{"B": 1,"A": 2}]).to_dict(orient='records',into=OrderedDict)
> [OrderedDict([('A',2),('B',1)])]

更新: 无法在调试器外部重现。我认为python的pprint模块正在放弃命令。这也是我第一次开始钻这个兔子洞的方式-我没注意到我的订购问题只是在我将数据打印到控制台后才开始的。我认为VS Code python插件显示调试控制台输出之前也以某种方式使用了pprint,这再次导致了命令丢失。我将结束这个问题,很抱歉浪费时间!

解决方法

成功的关键是传递一个初始化实例,而不只是一个类。

将您的代码更改为:

from collections import OrderedDict

dd = OrderedDict()
result = df.to_dict('records',into=dd)

实际上,使用 defaultdict 可以获得几乎相同的结果 (也从收藏集导入):

dd = defaultdict(list)
result = df.to_dict('records',into=dd)