以表表示的numpy数组之上的SQL。表逻辑派生自github.com/BastiaanBergman/nptab
nptab的Python项目详细描述
关于Nptab
轻量级、直观和快速的数据表。在
Nptab数据表是具有列和列名、行和行的表 数字。索引和切片数据类似于numpy数组 唯一真正的区别是每列可以有自己的数据类型。在
设计目标
我对pandas很失望:这是一个复杂的切片语法(.loc,.x, .iloc。。等),它是强制索引列和我在 想要一个纽比阵列。使用Nptab,我创建了许多需要的简化熊猫 我的数据工作。只关注多数据类型表的简单切片 基本的表格工具。在
- 直观的简单切片。在
- 使用纽比机械,以达到最佳性能,与其他工具集成 以及未来的支持。在
- 按列numpy数组存储数据(column Store)。在
- 没有特定的索引列,所有列都可以用作索引,可以选择 由用户决定。在
- 排序、分组、联接和追加表格的基本必要条件。在
安装
pip安装nptab
快速启动
初始化
要设置Nptab:
>>> from nptab import Nptab >>> nptab = Nptab([ ["John", "Joe", "Jane"], ... [1.82,1.65,2.15], ... [False,False,True]], columns = ["Name", "Height", "Married"]) >>> nptab Name | Height | Married --------+----------+----------- John | 1.82 | 0 Joe | 1.65 | 0 Jane | 2.15 | 1 3 rows ['<U4', '<f8', '|b1']
或者,可以从字典、纽比数组、熊猫中设置表 数据帧,或者根本没有数据。数据库连接器通常以列表的形式返回数据 对于记录,该模块提供了一个方便的函数,可以将其转换为 列列表。在
切片
切片可以以numpy的方式进行,始终返回Nptab对象:
^{pr2}$切片将始终返回Nptab,但以下三种情况除外:
- 显式地请求一列,则返回numpy数组:
>>> nptab[1:3,'Name'] # doctest: +SKIP array(['Joe', 'Jane'], dtype='<U4')
- 显式地请求一行,则返回一个元组:
>>> nptab[0,:] ('John', 1.82, False)
- 明确要求一个元素:
>>> nptab[0,'Name'] 'John'
一般来说,切片是直观的,不会偏离预期 从纽比那里。除了一个额外的功能,列可以被名称称为 还有数字。在
设置
设置元素的工作原理与切片相同:
>>> nptab = Nptab({'Name' : ["John", "Joe", "Jane"], 'Height' : [1.82,1.65,2.15], 'Married': [False,False,True]}) >>> nptab[0,"Name"] = "Jos" >>> nptab Name | Height | Married --------+----------+----------- Jos | 1.82 | 0 Joe | 1.65 | 0 Jane | 2.15 | 1 3 rows ['<U4', '<f8', '|b1']
值预期具有的数据类型与数据类型a相同 切片的结果是。在
添加列与设置元素的工作原理相同,只需为其指定一个新名称:
>>> nptab = Nptab({'Name' : ["John", "Joe", "Jane"], 'Height' : [1.82,1.65,2.15], 'Married': [False,False,True]}) >>> nptab['new'] = [1,2,3] >>> nptab Name | Height | Married | new --------+----------+-----------+------- John | 1.82 | 0 | 1 Joe | 1.65 | 0 | 2 Jane | 2.15 | 1 | 3 3 rows ['<U4', '<f8', '|b1', '<i8']
或将整列设置为相同的值:
>>> nptab = Nptab({'Name' : ["John", "Joe", "Jane"], 'Height' : [1.82,1.65,2.15], 'Married': [False,False,True]}) >>> nptab['new'] = 13 >>> nptab Name | Height | Married | new --------+----------+-----------+------- John | 1.82 | 0 | 13 Joe | 1.65 | 0 | 13 Jane | 2.15 | 1 | 13 3 rows ['<U4', '<f8', '|b1', '<i8']
就像numpy一样,切片不是数据的实际副本,而是它们 参考文献。在
追加Nptab和行
表格可以附加其他表格:
>>> nptab = Nptab({'Name' : ["John", "Joe", "Jane"], 'Height' : [1.82,1.65,2.15], 'Married': [False,False,True]}) >>> nptab += nptab >>> nptab Name | Height | Married --------+----------+----------- John | 1.82 | 0 Joe | 1.65 | 0 Jane | 2.15 | 1 John | 1.82 | 0 Joe | 1.65 | 0 Jane | 2.15 | 1 6 rows ['<U4', '<f8', '|b1']
或将行追加为字典:
>>> nptab = Nptab({'Name' : ["John", "Joe", "Jane"], 'Height' : [1.82,1.65,2.15], 'Married': [False,False,True]}) >>> nptab.row_append({'Height':1.81, 'Name':"Jack", 'Married':True}) >>> nptab Name | Height | Married --------+----------+----------- John | 1.82 | 0 Joe | 1.65 | 0 Jane | 2.15 | 1 Jack | 1.81 | 1 4 rows ['<U4', '<f8', '|b1']
实例属性
您的数据被简单地存储为numpy数组的列表,并且可以访问或 像那样被操纵(只是不要搞得一团糟):
>>> nptab = Nptab({'Name' : ["John", "Joe", "Jane"], 'Height' : [1.82,1.65,2.15], 'Married': [False,False,True]}) >>> nptab.columns ['Name', 'Height', 'Married'] >>> nptab.data # doctest: +SKIP [array(['John', 'Joe', 'Jane'], dtype='<U4'), array([ 1.82, 1.65, 2.15]), array([False, False, True], dtype=bool)]
进一步评估数据大小的基本方法:
>>> nptab.shape (3, 3) >>> len(nptab) 3
熊猫
用于与流行的datatable框架接口,来回 很简单:
>>> import pandas as pd >>> df = pd.DataFrame({'a':range(3),'b':range(10,13)}) >>> df a b 0 0 10 1 1 11 2 2 12
要从数据帧生成Nptab,只需将其提供给initialize:
>>> nptab = Nptab(df) >>> nptab a | b -----+----- 0 | 10 1 | 11 2 | 12 3 rows ['<i8', '<i8']
Nptab的dict属性提供了一种从Nptab生成数据帧的方法:
>>> df = pd.DataFrame(nptab.dict) >>> df a b 0 0 10 1 1 11 2 2 12
依赖关系
- numpy公司
- 表格(可选,推荐)
- pandas(可选,用于来回转换为数据帧)
测试时间:
- Python3.8.2;numpy 1.18.1
对Nptab有贡献
Nptab已经很完美了,不需要更多的贡献。开玩笑!在
有关归档问题和提出改进建议,请参阅存储库。在
pytest
cd nptab/test conda activate py38 pytestpylint
cd nptab/ ./pylint.shdoctest
cd nptab/docs make doctestsphynx
cd nptab/docs make htmlsetuptools/pypi
python setup.py sdist bdist_wheel twine upload dist/nptab-*
贡献者
- 斯蒂芬·博希[javadba@gmail.com]
- 对于原始的选项卡日志ic:巴斯蒂安·伯格曼[Bastiaan.Bergman@gmail.com]。在
- 项目
标签: