首页 > 解决方案 > Pandas:从字典创建框架时,什么决定了索引顺序?

问题描述

我想知道为什么通过嵌套的字典创建时,下面的数据框中的索引没有排序?我期望包含 2000 年数据的行将是第一行,然后分别是 2001 年和 2002 年的行。我也意识到我可以运行frame.sort_index()以获得所需的结果,但只是想知道为什么它不会自动发生。

In [1]: import pandas as pd

In [2]: pop = {'Nevada': {2001: 2.4, 2002: 2.9},
   ...:      ...:     'Ohio': {2000: 1.5, 2001: 1.7,2002: 3.6}}

In [3]: frame = pd.DataFrame(pop)

In [4]: frame
Out[4]:
      Nevada  Ohio
2001     2.4   1.7
2002     2.9   3.6
2000     NaN   1.5

以上是使用 Python 3.8.3 和 iPython 7.18.1 生成的,示例来自 Wes McKinney 的 Python for Data Analysis 的第 5 章(索引在书中排序)。

标签: pythonpandas

解决方案


我认为了解正在发生的事情的一个好方法是尝试翻转状态的顺序:

pop = {'Ohio': {2000: 1.5, 2001: 1.7,2002: 3.6}, 'Nevada': {2001: 2.4, 2002: 2.9}}

现在你得到:

      Ohio  Nevada
2000   1.5     NaN
2001   1.7     2.4
2002   3.6     2.9

那么原著中发生了什么?它首先经过内华达州,它只有 2001 年和 2002 年的索引。然后它经过俄亥俄州,它有一个添加到底部的新索引 (2000),以及两个已经存在的旧索引 (2001 和 2002),因此值被添加到适当的位置。

至于为什么它出现在排序的书中,这可能是熊猫版本的差异。Modern Pandas (post v0.25. See Docs ) 维护指定的键顺序。这本书可能是为碰巧(随机)首先使用俄亥俄州的旧版 pandas 编写的。


推荐阅读