.. _astropy_table:
.. include:: references.txt
*****************************
Data Tables (`astropy.table`)
*****************************
Introduction
============
`astropy.table` provides functionality for storing and manipulating
heterogenous tables of data in a way that is familiar to `numpy` users. A few
notable features of this package are:
* Initialize a table from a wide variety of input data structures and types.
* Modify a table by adding or removing columns, changing column names,
or adding new rows of data.
* Handle tables containing missing values.
* Include table and column metadata as flexible data structures.
* Specify a description, units and output formatting for columns.
* Interactively scroll through long tables similar to using ``more``.
* Create a new table by selecting rows or columns from a table.
* Full support for multidimensional columns.
* Create a table by referencing (not copying) an existing `numpy` table.
Currently `astropy.table` is used when reading an ASCII table using
`astropy.io.ascii`. Future releases of AstroPy are expected to use
the |Table| class for other subpackages such as `astropy.io.votable`
and `astropy.io.fits`.
Getting Started
===============
The basic workflow for creating a table, accessing table elements,
and modifying the table is shown below. These examples show a very simple
case, while the full `astropy.table` documentation is available from the
:ref:`using_astropy_table` section.
First create a simple table with three columns of data named ``a``, ``b``,
and ``c``. These columns have integer, float, and string values respectively::
>>> from astropy.table import Table, Column
>>> a = [1, 4, 5]
>>> b = [2.0, 5.0, 8.2]
>>> c = ['x', 'y', 'z']
>>> t = Table([a, b, c], names=('a', 'b', 'c'), meta={'name': 'first table'})
There are a few ways to examine the table. You can get detailed information
about the table values and column definitions as follows::
>>> t
array([(1, 2.0, 'x'), (4, 5.0, 'y'), (5, 8.2, 'z')],
dtype=[('a', '>> print(t)
a b c
--- --- ---
1 2.0 x
4 5.0 y
5 8.2 z
For a long table you can scroll up and down through the table one page at
time::
>>> t.more()
Now examine some high-level information about the table::
>>> t.colnames
['a', 'b', 'c']
>>> len(t)
3
>>> t.meta
{'name': 'first table'}
Access the data by column or row using familiar `numpy` structured array syntax::
>>> t['a'] # Column 'a'
array([1, 4, 5])
>>> t['a'][1] # Row 1 of column 'a'
4
>>> t[1] # Row obj for with row 1 values
>>> t[1]['a'] # Column 'a' of row 1
4
One can retreive a subset of a table by rows (using a slice) or
columns (using column names), where the subset is returned as a new table::
>>> print(t[0:2]) # Table object with rows 0 and 1
a b c
--- --- ---
1 2.0 x
4 5.0 y
>>> t['a', 'c'] # Table with cols 'a', 'c'
a c
--- ---
1 x
4 y
5 z
Modifying table values in place is flexible and works as one would expect::
>>> t['a'] = [-1, -2, -3] # Set all column values
>>> t['a'][2] = 30 # Set row 2 of column 'a'
>>> t[1] = (8, 9.0, "W") # Set all row values
>>> t[1]['b'] = -9 # Set column 'b' of row 1
>>> t[0:2]['b'] = 100.0 # Set column 'c' of rows 0 and 1
>>> print(t)
a b c
--- ----- ---
-1 100.0 x
8 100.0 W
30 8.2 z
Add, remove, and rename columns with the following::
>>> t.add_column(Column('d', [1, 2, 3])))
>>> t.remove_column('c')
>>> t.rename_column('a', 'A')
>>> t.colnames
['A', 'b', 'd']
Adding a new row of data to the table is as follows::
>>> t.add_row([-8, -9, 10])
>>> len(t)
4
Lastly, one can create a table with support for missing values, for example by setting
``masked=True``::
>>> t = Table([a, b, c], names=('a', 'b', 'c'), masked=True)
>>> t['a'].mask = [True, True, False]
>>> t
masked_array(data = [(--, 2.0, 'x') (--, 5.0, 'y') (5, 8.2, 'z')],
mask = [(True, False, False) (True, False, False) (False, False, False)],
fill_value = (999999, 1e+20, 'N'),
dtype = [('a', '>> print(t)
a b c
--- --- ---
-- 2.0 x
-- 5.0 y
5 8.2 z
.. _using_astropy_table:
Using `table`
=============
The details of using `astropy.table` are provided in the following sections:
.. toctree::
:maxdepth: 2
construct_table.rst
access_table.rst
modify_table.rst
masking.rst
io.rst
Reference/API
=============
.. automodapi:: astropy.table
.. automodapi:: astropy.table.io_registry