以表表示的numpy数组之上的SQL。表逻辑派生自github.com/BastiaanBergman/npsql

npsql的Python项目详细描述


关于Nptab

轻量级、直观和快速的数据表。在

Nptab数据表是具有列和列名、行和行的表 数字。索引和切片数据类似于numpy数组 唯一真正的区别是每列可以有自己的数据类型。在

设计目标

我对pandas很失望:这是一个复杂的切片语法(.loc,.x, 伊洛克。。等),它是强制索引列和我在 想要一个纽比阵列。使用Nptab,我创建了许多需要的简化熊猫 我的数据工作。只关注多数据类型表的简单切片 基本的表格工具。在

  • 直观的简单切片。在
  • 使用纽比机械,以达到最佳性能,与其他工具集成 以及未来的支持。在
  • 按列numpy数组存储数据(column Store)。在
  • 没有特定的索引列,所有列都可以用作索引,可以选择 由用户决定。在
  • 排序、分组、联接和追加表格的基本必要条件。在

安装

管道安装npsql

快速启动

初始化

要设置Nptab:

>>> from npsql import Nptab
>>> npsql = Nptab([ ["John", "Joe", "Jane"],
...                [1.82,1.65,2.15],
...                [False,False,True]], columns = ["Name", "Height", "Married"])
>>> npsql
 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数组:
>>> npsql[1:3,'Name']       # doctest: +SKIP
array(['Joe', 'Jane'],
      dtype='<U4')
  1. 显式地请求一行,则返回一个元组:
>>> npsql[0,:]
('John', 1.82, False)
  1. 明确要求一个元素:
>>> npsql[0,'Name']
'John'

一般来说,切片是直观的,不会偏离预期 从纽比那里。除了一个额外的功能,列可以被名称称为 还有数字。在

设置

设置元素的工作原理与切片相同:

>>> npsql = Nptab({'Name' : ["John", "Joe", "Jane"], 'Height' : [1.82,1.65,2.15], 'Married': [False,False,True]})
>>> npsql[0,"Name"] = "Jos"
>>> npsql
 Name   |   Height |   Married
--------+----------+-----------
 Jos    |     1.82 |         0
 Joe    |     1.65 |         0
 Jane   |     2.15 |         1
3 rows ['<U4', '<f8', '|b1']

值预期具有的数据类型与数据类型a相同 切片的结果是。在

添加列与设置元素的工作原理相同,只需为其指定一个新名称:

>>> npsql = Nptab({'Name' : ["John", "Joe", "Jane"], 'Height' : [1.82,1.65,2.15], 'Married': [False,False,True]})
>>> npsql['new'] = [1,2,3]
>>> npsql
 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']

或将整列设置为相同的值:

>>> npsql = Nptab({'Name' : ["John", "Joe", "Jane"], 'Height' : [1.82,1.65,2.15], 'Married': [False,False,True]})
>>> npsql['new'] = 13
>>> npsql
 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和行

表格可以附加其他表格:

>>> npsql = Nptab({'Name' : ["John", "Joe", "Jane"], 'Height' : [1.82,1.65,2.15], 'Married': [False,False,True]})
>>> npsql += npsql
>>> npsql
 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']

或将行追加为字典:

>>> npsql = Nptab({'Name' : ["John", "Joe", "Jane"], 'Height' : [1.82,1.65,2.15], 'Married': [False,False,True]})
>>> npsql.row_append({'Height':1.81, 'Name':"Jack", 'Married':True})
>>> npsql
 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数组的列表,并且可以访问或 像那样被操纵(只是不要搞得一团糟):

>>> npsql = Nptab({'Name' : ["John", "Joe", "Jane"], 'Height' : [1.82,1.65,2.15], 'Married': [False,False,True]})
>>> npsql.columns
['Name', 'Height', 'Married']
>>> npsql.data        # doctest: +SKIP
[array(['John', 'Joe', 'Jane'],
      dtype='<U4'), array([ 1.82,  1.65,  2.15]), array([False, False,  True], dtype=bool)]

进一步评估数据大小的基本方法:

>>> npsql.shape
(3, 3)
>>> len(npsql)
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:

>>> npsql = Nptab(df)
>>> npsql
   a |   b
-----+-----
   0 |  10
   1 |  11
   2 |  12
3 rows ['<i8', '<i8']

Nptab的dict属性提供了一种从Nptab生成数据帧的方法:

>>> df = pd.DataFrame(npsql.dict)
>>> df
   a   b
0  0  10
1  1  11
2  2  12

依赖关系

  • numpy公司
  • 表格(可选,推荐)
  • pandas(可选,用于来回转换为数据帧)

测试时间:

  • Python18.2.1.1

对Nptab有贡献

Nptab已经很完美了,不需要更多的贡献。开玩笑!在

有关归档问题和提出改进建议,请参阅存储库。在

  • pytest

    cd npsql/test
    conda activate py38
    pytest
    
  • pylint

    cd npsql/
    ./pylint.sh
    
  • doctest

    cd npsql/docs
    make doctest
    
  • sphynx

    cd npsql/docs
    make html
    
  • setuptools/pypi

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

贡献者

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

推荐PyPI第三方库


热门话题
java如何在windows上向doclet添加多个sourcepath?   java谷歌地图应用程序   java为以下场景创建正则表达式   Java文件通道异常   Java集合如何将文件对象列表转换为路径对象列表?   多线程生产者/消费者模型使用Java(同步),但始终运行同一线程   java如何为存储在ArrayList中的特定属性设置值?   java一次不能加载多个osm文件   使用java 8将map<String,map<Long,customeObject>>转换为list<customeObject>   java JDK包含哪些脚本语言解释器?   java为什么eclipse在这里生成语法错误?   多线程Javasocket异常:socket已关闭且值为空   java我想在Android活动中创建一个带有图像的可滚动文本列表。我应该用什么?   java实现编译时警告   java根据安卓 SQLite数据库中前一行的相同值递增特定值   java移动迭代器语句使代码可编译   java JVM终身/旧代已达到限制&服务器挂起   为什么我们不能在映射上使用迭代器(Java)?   xml如何映射JAXB中已有的JavaBean