Pandas DataFrame构造函数对行进行排序,即使使用OrderedDict作为输入

问题描述

我创建一个OrderedDict:

from collections import OrderedDict

od = OrderedDict([((2,9),0.5218),((2,0),0.3647),((3,15),0.3640),8),0.3323),28),0.3310),0.3281),10),0.2938),0.2719)])

然后我将其输入到pandas DataFrame构造函数中:

import pandas as pd

df = pd.DataFrame({'values': od})

结果是这样的:

enter image description here

相反,它应该给出这个:

enter image description here

我不明白这是怎么回事?

P.S .:我不是在寻找解决问题的替代方法(不过,如果您认为这会对社区有所帮助,也欢迎您发布)。我只想了解为什么这里不起作用。这是一个错误,还是有逻辑? 这也不是此link的副本,因为我专门使用了OrderedDict,而不是普通的字典。

解决方法

如果您想以与字典相同的顺序获取DataFrame,则可以

$selectedcolor

输出

df = pd.DataFrame(od.values(),index=od.keys(),columns=['values'])

frame source code中唯一提到 values 2 9 0.5218 0 0.3647 3 15 0.3640 8 0.3323 2 28 0.3310 15 0.3281 10 0.2938 3 9 0.2719 的地方是OrderedDict的示例,因此此处无用。

似乎,即使您传递的是有序结构,将其包装在公用字典df.to_dict()中之后,默认情况下也会对其进行解析和重新排序,而pandas从OrderedDict中获取其索引。

如果您还使用列标签(字典json)构建字典,则该行为似乎被否决。

{'values': od}