我创建一个 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})
结果是这样的:
相反,它应该给出:
这里发生了什么我不明白的事情?
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 中唯一提及 OrderedDict
是 df.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/