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})
结果是这样的:
相反,它应该给出这个:
我不明白这里发生了什么?
PS:我不是在寻找解决问题的替代方法(尽管如果您认为它会对社区有所帮助,欢迎您发布它)。我只想了解为什么这里不起作用。这是一个错误,还是有一些逻辑?这也不是此链接的副本,因为我专门使用的是 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
框架源代码OrderedDict
中唯一提到的是 的示例,因此在这里没有用处。df.to_dict()
似乎即使您传递了一个有序的结构,一旦您将它包装在一个通用字典中{'values': od}
并且熊猫从 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
推荐阅读
- javascript - Normalizr:使用 Entity.processStrategy 方法过滤掉客户端未使用的数据是最佳实践吗?
- python-3.x - 如何修复这行代码的 TypeError。print('一年后你将是' + str(int(my_age) + 1) + '。')
- node.js - 如何在 JS 中访问如此深度嵌套的对象?[JSON]
- assembly - 此汇编代码的 C/C++ 等效项是什么?
- javascript - 如何在我的日期中减去一年并添加几个月?
- python - 如何根据模型属性使用不同的模板渲染模型
- php - laravel:删除路由功能的问题
- azure - 来自 Xamarin 中 Azure 通知中心的后台通知
- php - 有没有办法解决在已声明和初始化的变量上发生的未定义索引错误
- r - 是否有一个 R 函数用于通过块中值组的位置将索引(数字或字符 ID)列添加到大型数据帧?