【问题标题】:How to keep ordering when saving dict as pandas data frame?将dict保存为pandas数据框时如何保持排序?
【发布时间】:2019-08-09 04:04:45
【问题描述】:

如果我有一些示例数据:

dic = {'common': {'value': 18, 'attr': 20, 'param': 22},
       'fuzzy': {'value': 14, 'attr': 21, 'param': 24},
       'adhead': {'value': 13, 'attr': 20, 'param': 29}}

执行pd.DataFrame(dic)我得到:

       common  fuzzy  adhead
attr       20     21      20
param      22     24      29
value      18     14      13

在这里,“外部”列是可以的,但“内部”是排序的,这是我需要避免的。如何快速完成? (需要保持排序 - 这里的行是排序的)

提示:我在鞋底上有一条消息:

ma​​in:95:FutureWarning:排序,因为非串联轴未对齐。未来版本的 pandas 将更改为不按 默认。

要接受未来的行为,请传递 'sort=True'。

要保留当前行为并使警告静音,请通过 排序=假

但不知道是干什么用的。将此参数传递给 pd.DataFrame(dic, sort=False) 返回: TypeError: __init__() got an unexpected keyword argument 'sort'.

【问题讨论】:

  • 请参考OrderedDict
  • 字典没有顺序,所以没有顺序要维护。
  • @ecortazar 你不认为 OrderedDict 会起作用吗?
  • 好的,但我尝试了“OrderedDict”,但没有任何改变。
  • 由于 sub-dict 的顺序似乎很重要,因此字典显然不是他们正确的数据结构。我会建议从列表开始。如果您收到的是字典,那么 pandas 无法猜测正确的顺序应该是什么,因此您需要在之后重新索引。

标签: python pandas


【解决方案1】:

然后使用reindex作为保护

pd.DataFrame(dic).reindex(index=['value','attr','param'])
Out[553]: 
       common  fuzzy  adhead
value      18     14      13
attr       20     21      20
param      22     24      29

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-28
    • 2021-09-17
    • 2016-02-05
    • 2020-01-10
    • 1970-01-01
    • 2013-11-12
    • 1970-01-01
    相关资源
    最近更新 更多