簡體   English   中英

Pandas DataFrame 構造函數對行進行排序,即使使用 OrderedDict 作為輸入

[英]Pandas DataFrame constructor sorts rows, even with OrderedDict as input

我創建了一個 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 而不是普通的 dict。

如果您想以與字典相同的順序獲取 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

框架源代碼中唯一提到的OrderedDictdf.to_dict()的示例,因此在這里沒有用。

似乎即使您正在傳遞一個有序結構,一旦您將它包裝在一個公共字典{'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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM