将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
在这里,“外部”列是可以的,但“内部”是排序的,这是我需要避免的。如何快速完成? (需要保持排序 - 这里的行是排序的)
提示:我在鞋底上有一条消息:
main: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保存为字典形式