meg*_*ger 29 python dataset pandas
我正在用数据集做一些练习:
列出了许多词典
users = [
{"id": 0, "name": "Ashley"},
{"id": 1, "name": "Ben"},
{"id": 2, "name": "Conrad"},
{"id": 3, "name": "Doug"},
{"id": 4, "name": "Evin"},
{"id": 5, "name": "Florian"},
{"id": 6, "name": "Gerald"}
]
Run Code Online (Sandbox Code Playgroud)
字典与几个列表
users2 = {
"id": [0, 1, 2, 3, 4, 5, 6],
"name": ["Ashley", "Ben", "Conrad", "Doug","Evin", "Florian", "Gerald"]
}
Run Code Online (Sandbox Code Playgroud)
熊猫数据帧
import pandas as pd
pd_users = pd.DataFrame(users)
pd_users2 = pd.DataFrame(users2)
print pd_users == pd_users2
Run Code Online (Sandbox Code Playgroud)
问题:
Yan*_*ier 26
这涉及面向列的数据库与面向行的数据库.您的第一个示例是面向行的数据结构,第二个示例是面向列的.在Python的特定情况下,第一个使用插槽可以显着提高效率,这样就不需要为每一行复制列的字典.
哪种形式更好地取决于您对数据的处理方式; 例如,如果您只访问所有行,则面向行是自然的.面向列的同时可以更好地使用缓存,例如当你在特定字段中搜索时(在Python中,这可能会通过大量使用引用来减少;像数组这样的类型可以优化它).传统的面向行的数据库经常使用面向列的排序索引来加速查找,并且了解这些技术后,您可以使用键值存储实现任何组合.
Pandas确实将您的示例转换为相同的格式,但转换本身对于面向行的结构来说更昂贵,因为必须读取每个单独的字典.所有这些成本可能都很小.
在您的示例中有第三个选项不明显:在这种情况下,您只有两列,其中一列是从0开始的连续范围内的整数ID.这可以按条目本身的顺序存储,这意味着整个结构会在您调用的列表中找到users2['name']; 但值得注意的是,没有他们的位置,条目是不完整的.该列表使用enumerate()转换为行.数据库通常也有这种特殊情况(例如,sqlite rowid).
通常,从保持代码合理的数据结构开始,只有在了解用例并且存在可测量的性能问题时才进行优化.像熊猫这样的工具可能意味着大多数项目都能正常运行而不需要微调.
用户
当您需要添加一些新用户时,只需刷新dict所有用户详细信息并附加它
像@StevenRumbalski建议的那样可以轻松排序
搜索会很容易
随着记录的增长,这更加紧凑,易于管理(对于一些非常多的记录,我认为我们需要比用户更好的东西)
Users2
PS:不过,我想了解的优势,users2在users
同样一个很好的问题
查询的时间复杂度 -
但是,如果您的数据不是那么大并且现代处理器非常有效,那么这不会有太大影响.
你应该选择查找语法清晰可读的方法(可读性很重要).
第一个选项非常合适,因为变量是用户的集合(已经分配了id),而第二个选项只是用户名和id的集合.
| 归档时间: |
|
| 查看次数: |
1900 次 |
| 最近记录: |