python - 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 章(索引在书中排序)。
解决方案
我认为了解正在发生的事情的一个好方法是尝试翻转状态的顺序:
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 编写的。
推荐阅读
- python - 如何将图像分割模型的张量输出转换为图像?
- ios - 如何在 App Store 上发布测试版 App (TestFlight)
- javascript - 如果 json 仍未创建,则获取 json 数据
- c++ - [OpenCV][C++] 只记录检测到的运动
- swift - SwitUI 自定义水平滚动
- javascript - 如何使用选择元素插入 Thymleaf 片段?
- docker - 将本地文件夹挂载到 nvidia tensorflow docker
- fiware - stellio-context-broker 是否支持 keyValues?
- php - 想不出这个正则表达式的解决方案
- docker - 如何在 docker 容器外访问 ethereum/client-go shell