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

标签 python pandas dataframe ordereddict

我创建一个 OrderedDict:

from collections import OrderedDict

od = OrderedDict([((2, 9), 0.5218),
  ((2, 0), 0.3647),
  ((3, 15), 0.3640),
  ((3, 8), 0.3323),
  ((2, 28), 0.3310),
  ((2, 15), 0.3281),
  ((2, 10), 0.2938),
  ((3, 9), 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,您可以

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

输出

      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

frame source code 中唯一提及 OrderedDictdf.to_dict() 的示例,因此在这里没有用。

看来,即使您传递的是有序结构,一旦您将其包装在公共(public)字典中,默认情况下它就会被解析和重新排序 {'values': od} 并且 pandas 采用它来自 OrderedDict 的索引。

如果您也使用列标签(à la json)构建字典,则此行为似乎会被否决。

od = OrderedDict([
    ((2, 9), {'values':0.5218}),
    ((2, 0), {'values':0.3647}),
    ((3, 15), {'values':0.3640}),
    ((3, 8), {'values':0.3323}),
    ((2, 28), {'values':0.3310}),
    ((2, 15), {'values':0.3281}),
    ((2, 10), {'values':0.2938}),
    ((3, 9), {'values':0.2719})
])
df = pd.DataFrame(od).T
print(df)
      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

关于python - Pandas DataFrame 构造函数对行进行排序,即使使用 OrderedDict 作为输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64092264/

相关文章:

r - 如何将数据框几何图形保存到 R 中的 shapefile

python - 在Python中将值存储在本地宏中

python - 修改 pandas 数据框的列标题

python - numpy.fft2 结果是否生成遵循 numpy.fft 文档中所述的标准排序的结果?

python - 将 faker 与 selenium 和 python 结合使用

python - Pandas 将 groupby sum 值分配给原始表中的最后一行

python - 绘制一个数组以及多个 pandas 列

python - 将 Pandas 数据集转换为数组,以便在 Scikit-Learn 中建模

python - 无法在我的 VPS 上运行 CGI 程序

python - 振荡函数的积分在python中不收敛