【发布时间】:2021-02-18 04:15:34
【问题描述】:
当使用to_dict 和into 将DataFrame 转换为OrderedDict 时,我找不到让它保持记录顺序的方法。有没有办法在不循环记录和手动转换的情况下做到这一点?
DataFrame([{"B": 1, "A": 2}]).to_dict(orient='records', into=OrderedDict)
> [OrderedDict([('A', 2), ('B', 1)])]
更新: 无法在我的调试器之外重现。我认为python的 pprint 模块正在丢弃订单。这也是我第一次开始进入这个兔子洞的方式 - 我没有注意到我的订购问题只是在我将数据打印到控制台后才开始。我认为 VS Code python 插件也在显示调试控制台输出之前以某种方式使用 pprint ,这再次丢弃了订单。我将关闭这个问题,非常抱歉浪费了您的时间!
【问题讨论】:
-
你使用python 2还是python 3?看起来问题出在
DataFrame([{"B": 1, "A": 2}])中,其中{"B": 1, "A": 2}是一个字典,并且在低于3.6 的python 版本中,不能保证保持插入顺序。因此,您最终创建了一个数据框,该数据框可能具有您在最终输出中看到的('A', 2), ('B', 1)顺序。 -
谢谢。它是 python 3.8 - 所以这不应该是问题。
-
有趣。我无法在 python 3.8 上重现您的问题。
-
你有哪个熊猫版本?我有 1.1.2
-
我试图在输入端保证它,但我使用 OrderedDict 的次数越多,我就越困惑...
in_dict = OrderedDict([('B', 1), ('A', 2)])print(in_dict)-->OrderedDict([('A', 2), ('B', 1)])什么给了?还有什么方法可以用保证的顺序来初始化它?
标签: python pandas ordereddict