问题描述
当使用DataFrame
和OrderedDict
将to_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)