首页 > 解决方案 > DataFrame 到 OrderedDicts 列表 - 如何保留订单?

问题描述

将 a 转换DataFrameOrderedDictwith 时to_dictinto我找不到让它保持记录顺序的方法。有没有办法在不循环记录和手动转换的情况下做到这一点?

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

更新:无法在我的调试器之外重现。我认为python的 pprint 模块正在丢弃订单。这也是我第一次开始进入这个兔子洞的方式——我没有注意到我的订购问题只是在我将数据打印到控制台后才开始的。我认为 VS Code python 插件也在显示调试控制台输出之前以某种方式使用 pprint ,这再次丢弃了订单。我将关闭这个问题,非常抱歉浪费了时间!

标签: pythonpandasordereddict

解决方案


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

将您的代码更改为:

from collections import OrderedDict

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

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

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

推荐阅读