以表表示的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,但以下三种情况除外:

  1. 显式地请求一列,则返回numpy数组:
>>> nptab[1:3,'Name']       # doctest: +SKIP
array(['Joe', 'Jane'],
      dtype='<U4')
  1. 显式地请求一行,则返回一个元组:
>>> nptab[0,:]
('John', 1.82, False)
  1. 明确要求一个元素:
>>> 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
{id10}$

熊猫

用于与流行的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
    pytest
    
  • pylint

    cd nptab/
    ./pylint.sh
    
  • doctest

    cd nptab/docs
    make doctest
    
  • sphynx

    cd nptab/docs
    make html
    
  • setuptools/pypi

    python setup.py sdist bdist_wheel
    twine upload dist/nptab-*
    

贡献者

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java使用McClickListener单击了什么元素   Java时间戳在Oracle时间戳中不同情况下存储12 PM的奇怪行为   java无法使用事件总线对运行在不同机器上的垂直体进行通信   java Mockserver:收到请求后进行回调   java无法将Json字符串转换为Map<string,Object>   java如何按升序排列输出?   java视图行,带有oracle键。jbo。在SrCategoryParentIterator中找不到键[300100120394155]   javafxmysql连接示例   java正在等待加载完成   java是否可以将同一个有状态会话bean实例注入多个其他会话bean?   java无法让万向节检测离开或进入区域   使用JavaCV和OpenCV的java提供了dyld:lazy符号绑定失败:找不到符号:__sincos_stret   xml解析无法使用Java读取xml文档   java无法更改工具栏的颜色   javaapachesshd和JSCH   java无法在firebase存储中检索图像url   java问题与executeUpdate   同一应用程序中不同活动之间的java SharedReference