{ "info": { "author": "Bastiaan Bergman", "author_email": "Bastiaan.Bergman@gmail.com", "bugtrack_url": null, "classifiers": [ "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.6" ], "description": "About Tabel\n============\n\nLightweight, intuitive and fast data-tables.\n\n*Tabel* data-tables are tables with columns and column names, rows and row\nnumbers. Indexing and slicing your data is analogous to numpy array's. The\nonly real difference is that each column can have its own data type.\n\n\nDesign objectives\n-----------------\n\nI got frustrated with pandas: it's complicated slicing syntax (.loc, .x,\n.iloc, .. etc), it's enforced index column and the Series objects I get when I\nwant a numpy array. With Tabel I created the simplified pandas I need for many\nof my data-jobs. Just focussing on simple slicing of multi-datatype tables and\nbasic table tools.\n\n* Intuitive simple slicing.\n\n* Using numpy machinery, for best performance, integration with other tools\n and future support.\n\n* Store data by column numpy arrays (column store).\n\n* No particular index column, all columns can be used as the index, the choice\n is up to the user.\n\n* Fundamental necessities for sorting, grouping, joining and appending tables.\n\n\nInstall\n========\n\npip install tabel\n\nQuickstart\n===========\n\ninit\n----\n\nTo setup a Tabel:\n\n>>> from tabel import Tabel\n>>> tbl = Tabel([ [\"John\", \"Joe\", \"Jane\"],\n... [1.82,1.65,2.15],\n... [False,False,True]], columns = [\"Name\", \"Height\", \"Married\"])\n>>> tbl\n Name | Height | Married\n--------+----------+-----------\n John | 1.82 | 0\n Joe | 1.65 | 0\n Jane | 2.15 | 1\n3 rows ['>> tbl[1:3,[0,2]]\n Name | Married\n--------+-----------\n Joe | 0\n Jane | 1\n2 rows ['>> tbl[1:3,'Name'] # doctest: +SKIP\narray(['Joe', 'Jane'],\n dtype='>> tbl[0,:]\n('John', 1.82, False)\n\n3. explicitly one element is requested:\n\n>>> tbl[0,'Name']\n'John'\n\nIn general, slicing is intuitive and does not deviate from what would expect\nfrom numpy. With the one addition that columns can be referred to by names as\nwell as numbers.\n\nset\n----\n\nSetting elements works the same as slicing:\n\n>>> tbl = Tabel({'Name' : [\"John\", \"Joe\", \"Jane\"], 'Height' : [1.82,1.65,2.15], 'Married': [False,False,True]})\n>>> tbl[0,\"Name\"] = \"Jos\"\n>>> tbl\n Name | Height | Married\n--------+----------+-----------\n Jos | 1.82 | 0\n Joe | 1.65 | 0\n Jane | 2.15 | 1\n3 rows ['>> tbl = Tabel({'Name' : [\"John\", \"Joe\", \"Jane\"], 'Height' : [1.82,1.65,2.15], 'Married': [False,False,True]})\n>>> tbl['new'] = [1,2,3]\n>>> tbl\n Name | Height | Married | new\n--------+----------+-----------+-------\n John | 1.82 | 0 | 1\n Joe | 1.65 | 0 | 2\n Jane | 2.15 | 1 | 3\n3 rows ['>> tbl = Tabel({'Name' : [\"John\", \"Joe\", \"Jane\"], 'Height' : [1.82,1.65,2.15], 'Married': [False,False,True]})\n>>> tbl['new'] = 13\n>>> tbl\n Name | Height | Married | new\n--------+----------+-----------+-------\n John | 1.82 | 0 | 13\n Joe | 1.65 | 0 | 13\n Jane | 2.15 | 1 | 13\n3 rows ['>> tbl = Tabel({'Name' : [\"John\", \"Joe\", \"Jane\"], 'Height' : [1.82,1.65,2.15], 'Married': [False,False,True]})\n>>> tbl += tbl\n>>> tbl\n Name | Height | Married\n--------+----------+-----------\n John | 1.82 | 0\n Joe | 1.65 | 0\n Jane | 2.15 | 1\n John | 1.82 | 0\n Joe | 1.65 | 0\n Jane | 2.15 | 1\n6 rows ['>> tbl = Tabel({'Name' : [\"John\", \"Joe\", \"Jane\"], 'Height' : [1.82,1.65,2.15], 'Married': [False,False,True]})\n>>> tbl.row_append({'Height':1.81, 'Name':\"Jack\", 'Married':True})\n>>> tbl\n Name | Height | Married\n--------+----------+-----------\n John | 1.82 | 0\n Joe | 1.65 | 0\n Jane | 2.15 | 1\n Jack | 1.81 | 1\n4 rows ['>> tbl = Tabel({'Name' : [\"John\", \"Joe\", \"Jane\"], 'Height' : [1.82,1.65,2.15], 'Married': [False,False,True]})\n>>> tbl.columns\n['Name', 'Height', 'Married']\n>>> tbl.data # doctest: +SKIP\n[array(['John', 'Joe', 'Jane'],\n dtype='>> tbl.shape\n(3, 3)\n>>> len(tbl)\n3\n\npandas\n-------\n\nFor for interfacing with the popular datatable framework, going back and forth\nis easy:\n\n>>> import pandas as pd\n>>> df = pd.DataFrame({'a':range(3),'b':range(10,13)})\n>>> df\n a b\n0 0 10\n1 1 11\n2 2 12\n\nTo make a Tabel from a DataFrame, just supply it to the initialize:\n\n>>> tbl = Tabel(df)\n>>> tbl\n a | b\n-----+-----\n 0 | 10\n 1 | 11\n 2 | 12\n3 rows ['>> df = pd.DataFrame(tbl.dict)\n>>> df\n a b\n0 0 10\n1 1 11\n2 2 12\n\n\nResources & getting help\n==========================\n\n* See for the full API and more examples the documentation on `RTD `_.\n* The repository on `Github `_.\n* Installables on `pip `_.\n* Questions and answers on `StackOverflow `_, I\n will try to monitor for it.\n\nStable releases\n================\n* tabel 1.2.3\n\n * Added __delitem__ feature to delete row(s) or a column.\n\n* tabel 1.2.2\n\n * Added argument to save and read methods for csv and gz formats to specify\n whether or not to write/read a header with the column names. For reading\n header can be left to None for automatic sniffing of the header. Default is\n True for both read and save methods.\n\n* tabel 1.2.1\n\n * Removed unicode characters from description to fix pip install\n `issue `.\n\n* tabel 1.2.0\n\n * Fix for numpy 1.15.5 \"warnings\"\n * Fix for outerjoin to raise an error in case of unsupported datatypes\n\n* tabel 1.1\n\n * Added join and group_by methods\n * September 27, 2018\n\n* tabel 1.0\n\n * First release\n * September 8, 2018\n\n\nDependencies\n============\n\n* numpy\n* tabulate (optional, recommended)\n* pandas (optional, for converting back and forth to DataFrames)\n\nTested on:\n----------\n\n* Python 3.6.4; numpy 1.15.4\n* Python 3.6.4; numpy 1.14.3\n* Python 2.7.14; numpy 1.14.0\n\n\nContributing to Tabel\n=====================\nTabel is perfect already, no more contributions needed. Just kidding!\n\nSee the repository for filing issues and proposing enhancements.\n\nI'm using pytest, pylint, doctest, sphynx and setuptools.\n\n - pytest ::\n\n cd tabel/test\n conda activate py3_6\n pytest\n conda activate py2_7\n pytest\n\n - pylint ::\n\n cd tabel/\n ./pylint.sh\n\n - doctest ::\n\n cd tabel/docs\n make doctest\n\n - sphynx ::\n\n cd tabel/docs\n make html\n\n - setuptools/pypi ::\n\n python setup.py sdist bdist_wheel\n twine upload dist/tabel-1.1.0.*\n\n\nContributors\n============\nJust me, Bastiaan Bergman [Bastiaan.Bergman@gmail.com].\n\n\nWhat's in the name?\n===================\n\n*Tabel* is Dutch for table (two-dimensional enlisting), `wiktionary\n`_. The english word table, as in \"dinner\ntable\", translates in Dutch to *tafel*. The Dutch word *tafel* is an old\nfashioned word for data-table, mostly used for calculation tables which itself\nis old fashioned as well.\n\n\nToDo\n=====\n\n* polish error messages and validity checking and add testing for it.\n* cache buffers for faster appending: store temp in list and concatenate to\n array only once we use another method\n* allow for (sparse) numpy arrays as an element\n* adjust & limit __repr__ width for very wide Tabels in jupyter cell\n* items() and row_items() and keys() and values() method\n* pop_column method\n* tox - environment testing\n* set subsets of tabels with (subsets) of other tabels, seems logic as __setitem__ is\n allowed to provide the datatype that should have come from a __getitem__\n* datetime column support\n* add disk datalogger", "description_content_type": "text/x-rst", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/BastiaanBergman/tabel", "keywords": "data table", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "tabel", "package_url": "https://pypi.org/project/tabel/", "platform": "", "project_url": "https://pypi.org/project/tabel/", "project_urls": { "Documentation": "https://tabel.readthedocs.io/en/stable/", "Homepage": "https://github.com/BastiaanBergman/tabel", "Source Code": "https://github.com/BastiaanBergman/tabel" }, "release_url": "https://pypi.org/project/tabel/1.2.3/", "requires_dist": null, "requires_python": ">=2.6, >=3.0", "summary": "Lightweight, intuitive and fast data-tables.", "version": "1.2.3" }, "last_serial": 5684687, "releases": { "1.0.0": [ { "comment_text": "", "digests": { "md5": "f6df43f64803be777efe8a1a42da0010", "sha256": "589069b05944a3a1d2db3227e781ccb3d5db72d9b39726ea77ae6e3d2a954eb3" }, "downloads": -1, "filename": "tabel-1.0.0-py3-none-any.whl", "has_sig": false, "md5_digest": "f6df43f64803be777efe8a1a42da0010", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*", "size": 13711, "upload_time": "2018-09-10T19:58:53", "url": "https://files.pythonhosted.org/packages/3d/98/bba647b07e35e30368e7cb3066093928d8c983e6d0f031aa95b7bad6f4fe/tabel-1.0.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "38e6f5368f3cd65cd93eac6da973522e", "sha256": "111948416beb84ca99f2450049bf4af9cdff6616cdf3eeb412eb1215b287cc87" }, "downloads": -1, "filename": "tabel-1.0.0.tar.gz", "has_sig": false, "md5_digest": "38e6f5368f3cd65cd93eac6da973522e", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*", "size": 19161, "upload_time": "2018-09-10T19:58:55", "url": "https://files.pythonhosted.org/packages/26/f4/51c41d00efcd1f926b3f4485cbfa187441e9105d59951c51b2231564f112/tabel-1.0.0.tar.gz" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "a3b244087db466edd4f81093b79738c0", "sha256": "ad8b5f0ea37d3a95a7d944cb7c4fc7b32fdafa739891794584d0073b20a0c6f9" }, "downloads": -1, "filename": "tabel-1.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "a3b244087db466edd4f81093b79738c0", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*", "size": 13724, "upload_time": "2018-09-10T20:50:15", "url": "https://files.pythonhosted.org/packages/27/66/c76398c8fb63db2b06339a1de335d901f9f348d6d5500f1a16df67b461d9/tabel-1.0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f7e011a1fb91fbb8080b756d77813191", "sha256": "b6e6851d9db606e89e1b1a6fab9bfa23acd46081a395da2bb3c758aee6528e77" }, "downloads": -1, "filename": "tabel-1.0.1.tar.gz", "has_sig": false, "md5_digest": "f7e011a1fb91fbb8080b756d77813191", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*", "size": 19163, "upload_time": "2018-09-10T20:50:16", "url": "https://files.pythonhosted.org/packages/29/a7/8ac41a33a30737faa2de14f1f7993a37530f248c4eab66772f22bc76cb5b/tabel-1.0.1.tar.gz" } ], "1.0.2": [ { "comment_text": "", "digests": { "md5": "53b92ef8af4643edc6f3ef4c11204269", "sha256": "f8fd4e980138e3c41d7ecde40cddcc9e7a5d58fd62b1a65c3ae4eaca49263036" }, "downloads": -1, "filename": "tabel-1.0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "53b92ef8af4643edc6f3ef4c11204269", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*", "size": 13723, "upload_time": "2018-09-11T01:09:40", "url": "https://files.pythonhosted.org/packages/cc/2f/28ecf64699c9fcdc9e046563126759f7be08dafef102d5d2622ef53fbeab/tabel-1.0.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "de4bcb3b8c388f0ef87e2654c15cdc2c", "sha256": "6d2908c4fe28af821e1878549e70a1e4b18f7ba0f2e0d1bd3b5da159f4f4db52" }, "downloads": -1, "filename": "tabel-1.0.2.tar.gz", "has_sig": false, "md5_digest": "de4bcb3b8c388f0ef87e2654c15cdc2c", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*", "size": 19159, "upload_time": "2018-09-11T01:09:41", "url": "https://files.pythonhosted.org/packages/7b/41/6ff8f98d36ddd3e2b522dae13e34238edb49acc18b6c6b62383b7109fd00/tabel-1.0.2.tar.gz" } ], "1.0.3": [ { "comment_text": "", "digests": { "md5": "a602532b078eaf4474dfdd8b542c4b71", "sha256": "95e3d541eb9c118a1b971358ce120291c3f4ed804a22a1f4f1f8d6e8c889376b" }, "downloads": -1, "filename": "tabel-1.0.3-py3-none-any.whl", "has_sig": false, "md5_digest": "a602532b078eaf4474dfdd8b542c4b71", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*", "size": 13724, "upload_time": "2018-09-11T16:54:34", "url": "https://files.pythonhosted.org/packages/a7/8d/a63a35d4412d9e29fa132cfee365475a5a31d042a036409e7db12074092e/tabel-1.0.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "46ff5cd54e7d98f5aea8ea5fcb48c75d", "sha256": "55e8cbc9ffc1700513807fde5405953598b550dbbf46b7d4cfa7175d1a15febe" }, "downloads": -1, "filename": "tabel-1.0.3.tar.gz", "has_sig": false, "md5_digest": "46ff5cd54e7d98f5aea8ea5fcb48c75d", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*", "size": 19167, "upload_time": "2018-09-11T16:54:36", "url": "https://files.pythonhosted.org/packages/ca/32/defc60cd9173888ca5a042c6d720db42f07bf29a939bf6678fddf1e8af1e/tabel-1.0.3.tar.gz" } ], "1.1.0": [ { "comment_text": "", "digests": { "md5": "66a197555e0027a5160defa43ce7f40e", "sha256": "e37ae96c68e34fbd8c365f29c892622a35ae52cf4755b0f3eaa00325cd26741b" }, "downloads": -1, "filename": "tabel-1.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "66a197555e0027a5160defa43ce7f40e", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=2.6, >=3.0", "size": 16155, "upload_time": "2018-09-27T19:09:07", "url": "https://files.pythonhosted.org/packages/d0/32/0fa8a43d42825b3a9904206470c123ba5837fa65a42e288b0879488785c4/tabel-1.1.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c302a17233cfda7fb690211da7308d59", "sha256": "b116d0c5344373bd4fef549855bc2651db6617af552109bf7042d0755b784d04" }, "downloads": -1, "filename": "tabel-1.1.0.tar.gz", "has_sig": false, "md5_digest": "c302a17233cfda7fb690211da7308d59", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.6, >=3.0", "size": 20490, "upload_time": "2018-09-27T19:09:10", "url": "https://files.pythonhosted.org/packages/bf/fb/c0ebb7e60173f8f07a919ff48201ae8f2d5295d4bc6677e839f9ebcd3b04/tabel-1.1.0.tar.gz" } ], "1.1.1": [ { "comment_text": "", "digests": { "md5": "0a202c5252b9218ea85a017d3ed2e283", "sha256": "cf6aaf583032ccfa653a2966b179271e0934132a765d7ad222d90662f6ad7329" }, "downloads": -1, "filename": "tabel-1.1.1.tar.gz", "has_sig": false, "md5_digest": "0a202c5252b9218ea85a017d3ed2e283", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.6, >=3.0", "size": 20536, "upload_time": "2018-09-27T20:02:40", "url": "https://files.pythonhosted.org/packages/de/57/262d54d97bb6679983917af17650f607797d200e59f58b8be4b0045dbecb/tabel-1.1.1.tar.gz" } ], "1.2.0": [ { "comment_text": "", "digests": { "md5": "0ae66bd8b332c83b41ab0cd46368db81", "sha256": "3af82989c679491ffa2ed2860d6e64f7e7506ea9f799903cc8f7244f6cdeace7" }, "downloads": -1, "filename": "tabel-1.2.0.tar.gz", "has_sig": false, "md5_digest": "0ae66bd8b332c83b41ab0cd46368db81", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.6, >=3.0", "size": 21093, "upload_time": "2019-02-08T01:14:21", "url": "https://files.pythonhosted.org/packages/c1/85/d7c4a7100f3bd0a3d603f564d93d2436e33fbb9e8c1b0c276c8535b326c1/tabel-1.2.0.tar.gz" } ], "1.2.1": [ { "comment_text": "", "digests": { "md5": "d11c31987ff20f7eb6c65a6dfe84bbf6", "sha256": "7627e47c1aa62d95a967edaf97d5f39538f85d1ab0d110647cbb2bd42f1c8127" }, "downloads": -1, "filename": "tabel-1.2.1-py3-none-any.whl", "has_sig": false, "md5_digest": "d11c31987ff20f7eb6c65a6dfe84bbf6", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=2.6, >=3.0", "size": 16957, "upload_time": "2019-05-20T15:37:58", "url": "https://files.pythonhosted.org/packages/59/ce/6375d455a197ffad99b437edefca80878d92f7fbd3fed64ce9bd8ef2cefe/tabel-1.2.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6670a4aaef1b1324278083fcbf4d642d", "sha256": "7c9f0ab2af9a1a48b9b3e2ee3e95a3fa9deaf5da83d9ce342e88c9e200e09c0f" }, "downloads": -1, "filename": "tabel-1.2.1.tar.gz", "has_sig": false, "md5_digest": "6670a4aaef1b1324278083fcbf4d642d", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.6, >=3.0", "size": 21192, "upload_time": "2019-05-20T15:38:01", "url": "https://files.pythonhosted.org/packages/6e/f4/025057385f6ab20e314a0f0b42b6e127c03645e76c9b0d1bad9e232b4518/tabel-1.2.1.tar.gz" } ], "1.2.2": [ { "comment_text": "", "digests": { "md5": "d1810b4afad9f84b8e596ae1366acd39", "sha256": "947245fedcd38c4b886625671f2d14e7e116a3f913a6095d9a5c2b556348230f" }, "downloads": -1, "filename": "tabel-1.2.2.tar.gz", "has_sig": false, "md5_digest": "d1810b4afad9f84b8e596ae1366acd39", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.6, >=3.0", "size": 21829, "upload_time": "2019-08-01T19:33:51", "url": "https://files.pythonhosted.org/packages/19/5b/f065f393e2536330cb7f7c75eefdd1d3beb7d99ff8375f8ba8d9cf55ead3/tabel-1.2.2.tar.gz" } ], "1.2.3": [ { "comment_text": "", "digests": { "md5": "8d48b75a3a6b08b47c2ce6b18a4c594f", "sha256": "773c78f7805199d779663148f4a64ad6fd7036eb6b07a16380b1ed70a5e5adfa" }, "downloads": -1, "filename": "tabel-1.2.3.tar.gz", "has_sig": false, "md5_digest": "8d48b75a3a6b08b47c2ce6b18a4c594f", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.6, >=3.0", "size": 22568, "upload_time": "2019-08-15T22:42:51", "url": "https://files.pythonhosted.org/packages/5b/7c/db1bcd3765cb25376b21f4c72098e436ddf2edc6a5515c9a46d1c0aa3e5e/tabel-1.2.3.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "8d48b75a3a6b08b47c2ce6b18a4c594f", "sha256": "773c78f7805199d779663148f4a64ad6fd7036eb6b07a16380b1ed70a5e5adfa" }, "downloads": -1, "filename": "tabel-1.2.3.tar.gz", "has_sig": false, "md5_digest": "8d48b75a3a6b08b47c2ce6b18a4c594f", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.6, >=3.0", "size": 22568, "upload_time": "2019-08-15T22:42:51", "url": "https://files.pythonhosted.org/packages/5b/7c/db1bcd3765cb25376b21f4c72098e436ddf2edc6a5515c9a46d1c0aa3e5e/tabel-1.2.3.tar.gz" } ] }