将dict保存为pandas数据框时如何保持排序?

Posted

技术标签:

【中文标题】将dict保存为pandas数据框时如何保持排序?【英文标题】:How to keep ordering when saving dict as pandas data frame? 【发布时间】: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 无法猜测正确的顺序应该是什么,因此您需要在之后重新索引。 【参考方案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

【讨论】:

以上是关于将dict保存为pandas数据框时如何保持排序?的主要内容,如果未能解决你的问题,请参考以下文章

[python][pandas]DataFrame的基本操作

pandas使用to_dict方法把datafraem保存为字典形式

将 Pandas 数据框的选择保存到 csv [重复]

将两个 pandas 数据帧组合成一个数据帧“dict type cell”(pd.Panel 已弃用)

将dict列表转换为pandas中的行[重复]

将dict的dict转换为pandas中的数据框