Bases: object
A class to represent tables of heterogeneous data.
Table
provides a class for heterogeneous tabular data. A key enhancement provided by the Table
class over e.g. a numpy
structured array is the ability to easily modify the structure of the table by adding or removing columns, or adding new rows of data. In addition table and column metadata are fully supported.
Table
differs from NDData
by the assumption that the input data consists of columns of homogeneous data, where each column has a unique identifier and may contain additional metadata such as the data unit, format, and description.
See also: https://docs.astropy.org/en/stable/table/
numpy
ndarray
, dict
, list
, astropy:table-like object
, optional
Data to initialize table.
Specify whether the table is masked.
list
, optional
Specify column names.
list
, optional
Specify column data types.
dict
, optional
Metadata associated with the table.
Copy the input column data and make a deep copy of the input meta. Default is True.
numpy
ndarray
, list
of list
, optional
Row-oriented data for table instead of data
argument.
Copy any indices in the input data. Default is True.
list
, dict
, optional
List or dict of units to apply to columns.
list
, dict
, optional
List or dict of descriptions to apply to columns.
dict
, optional
Additional keyword args when converting table-like object.
Attributes Summary
Methods Summary
Attributes Documentation
True if table has any MaskedColumn
columns.
This does not check for mixin columns that may have masked values, use the has_masked_values
property in that case.
True if column in the table has values which are masked.
This may be relatively slow for large tables as it requires checking the mask values of each column.
True if table has any mixin columns (defined as columns that are not Column subclasses).
Return a TableILoc object that can be used for retrieving indexed rows in the order they appear in the index.
Return the indices associated with columns of the table as a TableIndices object.
Return a TableLoc object that can be used for retrieving rows by index in a given data range. Note that both loc and iloc work only with single-column indices.
Return a TableLocIndices object that can be used for retrieving the row indices corresponding to given table index key value or values.
Maintain tuple that controls table column visibility for print output.
This is a descriptor that inherits from MetaAttribute so that the attribute value is stored in the table meta[‘__attributes__’].
This gets used for the pprint_include_names
and pprint_exclude_names
Table attributes.
Maintain tuple that controls table column visibility for print output.
This is a descriptor that inherits from MetaAttribute so that the attribute value is stored in the table meta[‘__attributes__’].
This gets used for the pprint_include_names
and pprint_exclude_names
Table attributes.
Read and parse a data table and return as a Table.
This function provides the Table interface to the astropy unified I/O layer. This allows easily reading a file in many supported data formats using syntax such as:
>>> from astropy.table import Table >>> dat = Table.read('table.dat', format='ascii') >>> events = Table.read('events.fits', format='fits')
Get help on the available readers for Table
using the``help()`` method:
>>> Table.read.help() # Get help reading Table and list supported formats >>> Table.read.help('fits') # Get detailed help on Table FITS reader >>> Table.read.list_formats() # Print list of available formats
See also: https://docs.astropy.org/en/stable/io/unified.html
tuple
, optional
Positional arguments passed through to data reader. If supplied the first argument is typically the input filename.
str
File format specifier.
list
, dict
, optional
List or dict of units to apply to columns
list
, dict
, optional
List or dict of descriptions to apply to columns
dict
, optional
Keyword arguments passed through to data reader.
Table
Table corresponding to file contents
Write this Table object out in the specified format.
This function provides the Table interface to the astropy unified I/O layer. This allows easily writing a file in many supported data formats using syntax such as:
>>> from astropy.table import Table >>> dat = Table([[1, 2], [3, 4]], names=('a', 'b')) >>> dat.write('table.dat', format='ascii')
Get help on the available writers for Table
using the``help()`` method:
>>> Table.write.help() # Get help writing Table and list supported formats >>> Table.write.help('fits') # Get detailed help on Table FITS writer >>> Table.write.list_formats() # Print list of available formats
The serialize_method
argument is explained in the section on Table serialization methods.
See also: https://docs.astropy.org/en/stable/io/unified.html
tuple
, optional
Positional arguments passed through to data writer. If supplied the first argument is the output filename.
str
File format specifier.
str
, dict
, optional
Serialization method specifier for columns.
dict
, optional
Keyword arguments passed through to data writer.
Methods Documentation
Add a new column to the table using col
as input. If index
is supplied then insert column before index
position in the list of columns, otherwise append column to the end of the list.
The col
input can be any data object which is acceptable as a Table
column object or can be converted. This includes mixin columns and scalar or length=1 objects which get broadcast to match the table length.
To add several columns at once use add_columns()
or simply call add_column()
for each one. There is very little performance difference in the two approaches.
object
Data object for the new column
int
or None
Insert column before this position or at end (default).
str
Column name
Uniquify column name if it already exist. Default is False.
Make a copy of the new column. Default is True.
str
or None
Name to use if both name
and col.info.name
are not available. Defaults to col{number_of_columns}
.
Examples
Create a table with two columns ‘a’ and ‘b’, then create a third column ‘c’ and append it to the end of the table:
>>> t = Table([[1, 2], [0.1, 0.2]], names=('a', 'b')) >>> col_c = Column(name='c', data=['x', 'y']) >>> t.add_column(col_c) >>> print(t) a b c --- --- --- 1 0.1 x 2 0.2 y
Add column ‘d’ at position 1. Note that the column is inserted before the given index:
>>> t.add_column(['a', 'b'], name='d', index=1) >>> print(t) a d b c --- --- --- --- 1 a 0.1 x 2 b 0.2 y
Add second column named ‘b’ with rename_duplicate:
>>> t = Table([[1, 2], [0.1, 0.2]], names=('a', 'b')) >>> t.add_column(1.1, name='b', rename_duplicate=True) >>> print(t) a b b_1 --- --- --- 1 0.1 1.1 2 0.2 1.1
Add an unnamed column or mixin object in the table using a default name or by specifying an explicit name with name
. Name can also be overridden:
>>> t = Table([[1, 2], [0.1, 0.2]], names=('a', 'b')) >>> t.add_column(['a', 'b']) >>> t.add_column(col_c, name='d') >>> print(t) a b col2 d --- --- ---- --- 1 0.1 a x 2 0.2 b y
Add a list of new columns the table using cols
data objects. If a corresponding list of indexes
is supplied then insert column before each index
position in the original list of columns, otherwise append columns to the end of the list.
The cols
input can include any data objects which are acceptable as Table
column objects or can be converted. This includes mixin columns and scalar or length=1 objects which get broadcast to match the table length.
From a performance perspective there is little difference between calling this method once or looping over the new columns and calling add_column()
for each column.
list
of object
List of data objects for the new columns
list
of int
or None
Insert column before this position or at end (default).
list
of str
Column names
Make a copy of the new columns. Default is True.
Uniquify new column names if they duplicate the existing ones. Default is False.
Examples
Create a table with two columns ‘a’ and ‘b’, then create columns ‘c’ and ‘d’ and append them to the end of the table:
>>> t = Table([[1, 2], [0.1, 0.2]], names=('a', 'b')) >>> col_c = Column(name='c', data=['x', 'y']) >>> col_d = Column(name='d', data=['u', 'v']) >>> t.add_columns([col_c, col_d]) >>> print(t) a b c d --- --- --- --- 1 0.1 x u 2 0.2 y v
Add column ‘c’ at position 0 and column ‘d’ at position 1. Note that the columns are inserted before the given position:
>>> t = Table([[1, 2], [0.1, 0.2]], names=('a', 'b')) >>> t.add_columns([['x', 'y'], ['u', 'v']], names=['c', 'd'], ... indexes=[0, 1]) >>> print(t) c a d b --- --- --- --- x 1 u 0.1 y 2 v 0.2
Add second column ‘b’ and column ‘c’ with rename_duplicate
:
>>> t = Table([[1, 2], [0.1, 0.2]], names=('a', 'b')) >>> t.add_columns([[1.1, 1.2], ['x', 'y']], names=('b', 'c'), ... rename_duplicate=True) >>> print(t) a b b_1 c --- --- --- --- 1 0.1 1.1 x 2 0.2 1.2 y
Add unnamed columns or mixin objects in the table using default names or by specifying explicit names with names
. Names can also be overridden:
>>> t = Table() >>> col_b = Column(name='b', data=['u', 'v']) >>> t.add_columns([[1, 2], col_b]) >>> t.add_columns([[3, 4], col_b], names=['c', 'd']) >>> print(t) col0 b c d ---- --- --- --- 1 u 3 u 2 v 4 v
Insert a new index among one or more columns. If there are no indices, make this index the primary table index.
str
or list
List of column names (or a single column name) to index
None
Indexing engine class to use, either SortedArray
, BST
, or SCEngine
. If the supplied argument is None (by default), use SortedArray
.
False
)
If set to True, an exception will be raised if duplicate rows exist.
ValueError
If any selected column does not support indexing, or has more than one dimension.
ValueError
If unique=True and duplicate rows are found.
Add a new row to the end of the table.
The vals
argument can be:
Column values in the same order as table columns.
Keys corresponding to column names. Missing values will be filled with np.zeros for the column dtype.
None
All values filled with np.zeros for the column dtype.
This method requires that the Table object “owns” the underlying array data. In particular one cannot add a row to a Table that was initialized with copy=False from an existing array.
The mask
attribute should give (if desired) the mask for the values. The type of the mask should match that of the values, i.e. if vals
is an iterable, then mask
should also be an iterable with the same length, and if vals
is a mapping, then mask
should be a dictionary.
tuple
, list
, dict
or None
Use the specified values in the new row
tuple
, list
, dict
or None
Use the specified mask values in the new row
Examples
Create a table with three columns ‘a’, ‘b’ and ‘c’:
>>> t = Table([[1,2],[4,5],[7,8]], names=('a','b','c')) >>> print(t) a b c --- --- --- 1 4 7 2 5 8
Adding a new row with entries ‘3’ in ‘a’, ‘6’ in ‘b’ and ‘9’ in ‘c’:
>>> t.add_row([3,6,9]) >>> print(t) a b c --- --- --- 1 4 7 2 5 8 3 6 9
Return the indices which would sort the table according to one or more key columns. This simply calls the numpy.argsort
function on the table with the order
parameter set to keys
.
str
or list
of str
The column name(s) to order the table by
Sorting algorithm used by numpy.argsort
.
Sort in reverse order (default=False)
ndarray
, int
Array of indices that sorts the table by the specified key column(s).
Return a new copy of the table in the form of a structured np.ndarray or np.ma.MaskedArray object (as appropriate).
By default the returned array has all columns in native byte order. However, if this option is True
this preserves the byte order of all columns (if any are non-native).
list
, optional:
List of column names to include for returned structured array. Default is to include all table columns.
array
or MaskedArray
Copy of table as a numpy structured array. ndarray for unmasked or MaskedArray
for masked.
Convert bytestring columns (dtype.kind=’S’) to unicode (dtype.kind=’U’) using UTF-8 encoding.
Internally this changes string columns to represent each character in the string with a 4-byte UCS-4 equivalent, so it is inefficient for memory but allows scripts to manipulate string arrays with natural syntax.
Convert unicode columns (dtype.kind=’U’) to bytestring (dtype.kind=’S’) using UTF-8 encoding.
When exporting a unicode string array to a file, it may be desirable to encode unicode columns as bytestrings.
Return a copy of the table.
If True
(the default), copy the underlying data array and make a deep copy of the meta
attribute. Otherwise, use the same data array and make a shallow (key-only) copy of meta
.
Return column[item] for recarray compatibility.
Return copy of self, with masked values filled.
If input fill_value
supplied then that value is used for all masked entries in the table. Otherwise the individual fill_value
defined for each table column is used.
str
If supplied, this fill_value
is used for all masked entries in the entire table.
Table
New table with masked values filled
Create a Table
from a pandas.DataFrame
instance.
In addition to converting generic numeric or string columns, this supports conversion of pandas Date and Time delta columns to Time
and TimeDelta
columns, respectively.
pandas.DataFrame
A pandas pandas.DataFrame
instance
Include the index column in the returned table (default=False)
A dict mapping column names to a Unit
. The columns will have the specified unit in the Table.
Table
A Table
(or subclass) instance
ImportError
If pandas is not installed
Examples
Here we convert a pandas.DataFrame
instance to a QTable
.
>>> import numpy as np >>> import pandas as pd >>> from astropy.table import QTable
>>> time = pd.Series(['1998-01-01', '2002-01-01'], dtype='datetime64[ns]') >>> dt = pd.Series(np.array([1, 300], dtype='timedelta64[s]')) >>> df = pd.DataFrame({'time': time}) >>> df['dt'] = dt >>> df['x'] = [3., 4.] >>> with pd.option_context('display.max_columns', 20): ... print(df) time dt x 0 1998-01-01 0 days 00:00:01 3.0 1 2002-01-01 0 days 00:05:00 4.0
>>> QTable.from_pandas(df) <QTable length=2> time dt x Time TimeDelta float64 ----------------------- --------- ------- 1998-01-01T00:00:00.000 1.0 3.0 2002-01-01T00:00:00.000 300.0 4.0
Group this table by the specified keys
.
This effectively splits the table into groups which correspond to unique values of the keys
grouping object. The output is a new TableGroups
which contains a copy of this table but sorted by row according to keys
.
The keys
input to group_by
can be specified in different ways:
String or list of strings corresponding to table column name(s)
Numpy array (homogeneous or structured) with same length as this table
Table
with same length as this table
str
, list
of str
, numpy
array
, or Table
Key grouping object
Table
New table with groups set
Notes
The underlying sorting algorithm is guaranteed stable, meaning that the original table order is preserved within each group.
Return the positional index of column name
.
str
column name
int
Positional index of column name
.
Examples
Create a table with three columns ‘a’, ‘b’ and ‘c’:
>>> t = Table([[1, 2, 3], [0.1, 0.2, 0.3], ['x', 'y', 'z']], ... names=('a', 'b', 'c')) >>> print(t) a b c --- --- --- 1 0.1 x 2 0.2 y 3 0.3 z
Get index of column ‘b’ of the table:
>>> t.index_column('b') 1
Return a context manager for an indexing mode.
str
Either ‘freeze’, ‘copy_on_getitem’, or ‘discard_on_copy’. In ‘discard_on_copy’ mode, indices are not copied whenever columns or tables are copied. In ‘freeze’ mode, indices are not modified whenever columns are modified; at the exit of the context, indices refresh themselves based on column values. This mode is intended for scenarios in which one intends to make many additions or modifications in an indexed column. In ‘copy_on_getitem’ mode, indices are copied when taking column slices as well as table slices, so col[i0:i1] will preserve indices.
Add a new row before the given index
position in the table.
The vals
argument can be:
Column values in the same order as table columns.
Keys corresponding to column names. Missing values will be filled with np.zeros for the column dtype.
None
All values filled with np.zeros for the column dtype.
The mask
attribute should give (if desired) the mask for the values. The type of the mask should match that of the values, i.e. if vals
is an iterable, then mask
should also be an iterable with the same length, and if vals
is a mapping, then mask
should be a dictionary.
tuple
, list
, dict
or None
Use the specified values in the new row
tuple
, list
, dict
or None
Use the specified mask values in the new row
Iterate over the columns of this table.
Examples
To iterate over the columns of a table:
>>> t = Table([[1], [2]]) >>> for col in t.itercols(): ... print(col) col0 ---- 1 col1 ---- 2
Using itercols()
is similar to for col in t.columns.values()
but is syntactically preferred.
Iterate over rows of table returning a tuple of values for each row.
This method is especially useful when only a subset of columns are needed.
The iterrows
method can be substantially faster than using the standard Table row iteration (e.g. for row in tbl:
), since that returns a new ~astropy.table.Row
object for each row and accessing a column in that row (e.g. row['col0']
) is slower than tuple access.
list
List of column names (default to all columns if no names provided)
Iterator returns tuples of row values
Examples
Create a table with three columns ‘a’, ‘b’ and ‘c’:
>>> t = Table({'a': [1, 2, 3], ... 'b': [1.0, 2.5, 3.0], ... 'c': ['x', 'y', 'z']})
To iterate row-wise using column names:
>>> for a, c in t.iterrows('a', 'c'): ... print(a, c) 1 x 2 y 3 z
Keep only the columns specified (remove the others).
str
or iterable of str
The columns to keep. All other columns will be removed.
Examples
Create a table with three columns ‘a’, ‘b’ and ‘c’:
>>> t = Table([[1, 2, 3],[0.1, 0.2, 0.3],['x', 'y', 'z']], ... names=('a', 'b', 'c')) >>> print(t) a b c --- --- --- 1 0.1 x 2 0.2 y 3 0.3 z
Keep only column ‘a’ of the table:
>>> t.keep_columns('a') >>> print(t) a --- 1 2 3
Keep columns ‘a’ and ‘c’ of the table:
>>> t = Table([[1, 2, 3],[0.1, 0.2, 0.3],['x', 'y', 'z']], ... names=('a', 'b', 'c')) >>> t.keep_columns(['a', 'c']) >>> print(t) a c --- --- 1 x 2 y 3 z
Interactively browse table with a paging interface.
Supported keys:
f, <space> : forward one page b : back one page r : refresh same page n : next row p : previous row < : go to beginning > : go to end q : quit browsing h : print this help
int
Maximum number of lines in table output
int
or None
Maximum character width of output
Include a header row for column names. Default is True.
Include a header row for unit. Default is to show a row for units only if one or more columns has a defined value for the unit.
Include a header row for column dtypes. Default is False.
Return a list of lines for the formatted string representation of the table.
If max_lines=None
is supplied then the height of the screen terminal is used to set max_lines
. If the terminal height cannot be determined then the default will be determined using the astropy.conf.max_lines
configuration item. If a negative value of max_lines
is supplied then there is no line limit applied (default).
The same applies for max_width
except the configuration item is astropy.conf.max_width
.
int
or None
Maximum number of rows to output
int
or None
Maximum character width of output
Include a header row for column names. Default is True.
Include a header row for unit. Default is to show a row for units only if one or more columns has a defined value for the unit.
Include a header row for column dtypes. Default is True.
Format the output as an HTML table. Default is False.
str
or None
An ID tag for the table; only used if html is set. Default is “table{id}”, where id is the unique integer id of the table object, id(self)
str
or list
or tuple
or None
Left/right alignment of columns. Default is right (None) for all columns. Other allowed values are ‘>’, ‘<’, ‘^’, and ‘0=’ for right, left, centered, and 0-padded, respectively. A list of strings can be provided for alignment of tables with multiple columns.
str
or list
of str
or None
CSS classes for the table; only used if html is set. Default is None.
list
Formatted table as a list of strings.
Deprecated since version 7.0: The pformat_all function is deprecated and may be removed in a future version. Use Table.pformat instead.
Return a list of lines for the formatted string representation of the entire table.
If max_lines=None
is supplied then the height of the screen terminal is used to set max_lines
. If the terminal height cannot be determined then the default will be determined using the astropy.conf.max_lines
configuration item. If a negative value of max_lines
is supplied then there is no line limit applied (default).
The same applies for max_width
except the configuration item is astropy.conf.max_width
.
int
or None
Maximum number of rows to output
int
or None
Maximum character width of output
Include a header row for column names. Default is True.
Include a header row for unit. Default is to show a row for units only if one or more columns has a defined value for the unit.
Include a header row for column dtypes. Default is True.
Format the output as an HTML table. Default is False.
str
or None
An ID tag for the table; only used if html is set. Default is “table{id}”, where id is the unique integer id of the table object, id(self)
str
or list
or tuple
or None
Left/right alignment of columns. Default is right (None) for all columns. Other allowed values are ‘>’, ‘<’, ‘^’, and ‘0=’ for right, left, centered, and 0-padded, respectively. A list of strings can be provided for alignment of tables with multiple columns.
str
or list
of str
or None
CSS classes for the table; only used if html is set. Default is None.
list
Formatted table as a list of strings.
Print a formatted string representation of the table.
If no value of max_lines
is supplied then the height of the screen terminal is used to set max_lines
. If the terminal height cannot be determined then the default is taken from the configuration item astropy.conf.max_lines
. If a negative value of max_lines
is supplied then there is no line limit applied.
The same applies for max_width except the configuration item is astropy.conf.max_width
.
int
or None
Maximum number of lines in table output.
int
or None
Maximum character width of output.
Include a header row for column names. Default is True.
Include a header row for unit. Default is to show a row for units only if one or more columns has a defined value for the unit.
Include a header row for column dtypes. Default is False.
str
or list
or tuple
or None
Left/right alignment of columns. Default is right (None) for all columns. Other allowed values are ‘>’, ‘<’, ‘^’, and ‘0=’ for right, left, centered, and 0-padded, respectively. A list of strings can be provided for alignment of tables with multiple columns.
Print a formatted string representation of the entire table.
This method is the same as astropy.table.Table.pprint
except that the default max_lines
and max_width
are both -1 so that by default the entire table is printed instead of restricting to the size of the screen terminal.
int
or None
Maximum number of lines in table output.
int
or None
Maximum character width of output.
Include a header row for column names. Default is True.
Include a header row for unit. Default is to show a row for units only if one or more columns has a defined value for the unit.
Include a header row for column dtypes. Default is False.
str
or list
or tuple
or None
Left/right alignment of columns. Default is right (None) for all columns. Other allowed values are ‘>’, ‘<’, ‘^’, and ‘0=’ for right, left, centered, and 0-padded, respectively. A list of strings can be provided for alignment of tables with multiple columns.
Remove a column from the table.
This can also be done with:
str
Name of column to remove
Examples
Create a table with three columns ‘a’, ‘b’ and ‘c’:
>>> t = Table([[1, 2, 3], [0.1, 0.2, 0.3], ['x', 'y', 'z']], ... names=('a', 'b', 'c')) >>> print(t) a b c --- --- --- 1 0.1 x 2 0.2 y 3 0.3 z
Remove column ‘b’ from the table:
>>> t.remove_column('b') >>> print(t) a c --- --- 1 x 2 y 3 z
To remove several columns at the same time use remove_columns.
Remove several columns from the table.
str
or iterable of str
Names of the columns to remove
Examples
Create a table with three columns ‘a’, ‘b’ and ‘c’:
>>> t = Table([[1, 2, 3], [0.1, 0.2, 0.3], ['x', 'y', 'z']], ... names=('a', 'b', 'c')) >>> print(t) a b c --- --- --- 1 0.1 x 2 0.2 y 3 0.3 z
Remove columns ‘b’ and ‘c’ from the table:
>>> t.remove_columns(['b', 'c']) >>> print(t) a --- 1 2 3
Specifying only a single column also works. Remove column ‘b’ from the table:
>>> t = Table([[1, 2, 3], [0.1, 0.2, 0.3], ['x', 'y', 'z']], ... names=('a', 'b', 'c')) >>> t.remove_columns('b') >>> print(t) a c --- --- 1 x 2 y 3 z
This gives the same as using remove_column.
Remove all indices involving the given column. If the primary index is removed, the new primary index will be the most recently added remaining index.
str
Name of column
Remove a row from the table.
int
Index of row to remove
Examples
Create a table with three columns ‘a’, ‘b’ and ‘c’:
>>> t = Table([[1, 2, 3], [0.1, 0.2, 0.3], ['x', 'y', 'z']], ... names=('a', 'b', 'c')) >>> print(t) a b c --- --- --- 1 0.1 x 2 0.2 y 3 0.3 z
Remove row 1 from the table:
>>> t.remove_row(1) >>> print(t) a b c --- --- --- 1 0.1 x 3 0.3 z
To remove several rows at the same time use remove_rows.
Remove rows from the table.
slice
or int
or array
of int
Specification for rows to remove
Examples
Create a table with three columns ‘a’, ‘b’ and ‘c’:
>>> t = Table([[1, 2, 3], [0.1, 0.2, 0.3], ['x', 'y', 'z']], ... names=('a', 'b', 'c')) >>> print(t) a b c --- --- --- 1 0.1 x 2 0.2 y 3 0.3 z
Remove rows 0 and 2 from the table:
>>> t.remove_rows([0, 2]) >>> print(t) a b c --- --- --- 2 0.2 y
Note that there are no warnings if the slice operator extends outside the data:
>>> t = Table([[1, 2, 3], [0.1, 0.2, 0.3], ['x', 'y', 'z']], ... names=('a', 'b', 'c')) >>> t.remove_rows(slice(10, 20, 1)) >>> print(t) a b c --- --- --- 1 0.1 x 2 0.2 y 3 0.3 z
Rename a column.
This can also be done directly by setting the name
attribute of the info
property of the column:
table[name].info.name = new_name
str
The current name of the column.
str
The new name for the column
Examples
Create a table with three columns ‘a’, ‘b’ and ‘c’:
>>> t = Table([[1,2],[3,4],[5,6]], names=('a','b','c')) >>> print(t) a b c --- --- --- 1 3 5 2 4 6
Renaming column ‘a’ to ‘aa’:
>>> t.rename_column('a' , 'aa') >>> print(t) aa b c --- --- --- 1 3 5 2 4 6
Rename multiple columns.
list
, tuple
A list or tuple of existing column names.
list
, tuple
A list or tuple of new column names.
Examples
Create a table with three columns ‘a’, ‘b’, ‘c’:
>>> t = Table([[1,2],[3,4],[5,6]], names=('a','b','c')) >>> print(t) a b c --- --- --- 1 3 5 2 4 6
Renaming columns ‘a’ to ‘aa’ and ‘b’ to ‘bb’:
>>> names = ('a','b') >>> new_names = ('aa','bb') >>> t.rename_columns(names, new_names) >>> print(t) aa bb c --- --- --- 1 3 5 2 4 6
Replace column name
with the new col
object.
The behavior of copy
for Column objects is: - copy=True: new class instance with a copy of data and deep copy of meta - copy=False: new class instance with same data and a key-only copy of meta
For mixin columns: - copy=True: new class instance with copy of data and deep copy of meta - copy=False: original instance (no copy at all)
str
Name of column to replace
Column
or ndarray
or sequence
New column object to replace the existing column.
Make copy of the input col
, default=True
Examples
Replace column ‘a’ with a float version of itself:
>>> t = Table([[1, 2, 3], [0.1, 0.2, 0.3]], names=('a', 'b')) >>> float_a = t['a'].astype(float) >>> t.replace_column('a', float_a)
Reverse the row order of table rows. The table is reversed in place and there are no function arguments.
Examples
Create a table with three columns:
>>> t = Table([['Max', 'Jo', 'John'], ['Miller','Miller','Jackson'], ... [12,15,18]], names=('firstname','name','tel')) >>> print(t) firstname name tel --------- ------- --- Max Miller 12 Jo Miller 15 John Jackson 18
Reversing order:
>>> t.reverse() >>> print(t) firstname name tel --------- ------- --- John Jackson 18 Jo Miller 15 Max Miller 12
Round numeric columns in-place to the specified number of decimals. Non-numeric columns will be ignored.
Number of decimals to round the columns to. If a dict is given, the columns will be rounded to the number specified as the value. If a certain column is not in the dict given, it will remain the same.
Examples
Create three columns with different types:
>>> t = Table([[1, 4, 5], [-25.55, 12.123, 85], ... ['a', 'b', 'c']], names=('a', 'b', 'c')) >>> print(t) a b c --- ------ --- 1 -25.55 a 4 12.123 b 5 85.0 c
Round them all to 0:
>>> t.round(0) >>> print(t) a b c --- ----- --- 1 -26.0 a 4 12.0 b 5 85.0 c
Round column ‘a’ to -1 decimal:
>>> t.round({'a':-1}) >>> print(t) a b c --- ----- --- 0 -26.0 a 0 12.0 b 0 85.0 c
Ensure a column named name
exists.
If name
is already present then default
is ignored. Otherwise default
can be any data object which is acceptable as a Table
column object or can be converted. This includes mixin columns and scalar or length=1 objects which get broadcast to match the table length.
str
Name of the column.
object
Data object for the new column.
Column
, MaskedColumn
or mixin-column type
The column named name
if it is present already, or the validated default
converted to a column otherwise.
TypeError
If the table is empty and default
is a scalar object.
Examples
Start with a simple table:
>>> t0 = Table({"a": ["Ham", "Spam"]}) >>> t0 <Table length=2> a str4 ---- Ham Spam
Trying to add a column that already exists does not modify it:
>>> t0.setdefault("a", ["Breakfast"]) <Column name='a' dtype='str4' length=2> Ham Spam >>> t0 <Table length=2> a str4 ---- Ham Spam
But if the column does not exist it will be created with the default value:
>>> t0.setdefault("approved", False) <Column name='approved' dtype='bool' length=2> False False >>> t0 <Table length=2> a approved str4 bool ---- -------- Ham False Spam False
Deprecated since version 6.1: We are planning on deprecating show_in_browser in the future. If you are actively using this method, please let us know at astropy/astropy#16067
Render the table in HTML and show it in a web browser.
int
Maximum number of rows to export to the table (set low by default to avoid memory issues, since the browser view requires duplicating the table in memory). A negative value of max_lines
indicates no row limit.
If True
, prepends some javascript headers so that the table is rendered as a DataTables data table. This allows in-browser searching & sorting, but requires a connection to the internet to load the necessary javascript libraries from a CDN. Working offline may work in limited circumstances, if the browser has cached the necessary libraries from a previous use of this method.
str
Any legal browser name, e.g. 'firefox'
, 'chrome'
, 'safari'
(for mac, you may need to use 'open -a "/Applications/Google Chrome.app" {}'
for Chrome). If 'default'
, will use the system default browser.
dict
Passed to the astropy.table.JSViewer
init. Defaults to {'use_local_files': False}
which means that the JavaScript libraries will be loaded from a CDN.
str
or None
An html ID tag for the table. Default is table{id}
, where id is the unique integer id of the table object, id(self).
str
or None
A string with a list of HTML classes used to style the table. Default is “display compact”, and other possible values can be found in https://www.datatables.net/manual/styling/classes
str
A valid CSS string declaring the formatting for the table. Defaults to astropy.table.jsviewer.DEFAULT_CSS
.
str
or False
If this does not evaluate to False, a column with the given name will be added to the version of the table that gets displayed. This new column shows the index of the row in the table itself, even when the displayed table is re-sorted by another column. Note that if a column with this name already exists, this option will be ignored. Defaults to “idx”.
Render the table in HTML and show it in the Jupyter notebook.
Note
The method API was modified in v7.0 to include a backend
argument and require only keyword arguments.
Backend to use for rendering (default=”ipydatagrid”). The “classic” backend is deprecated since v6.1.
dict
, optional
Keyword arguments as accepted by desired backend. See astropy.table.notebook_backends
for the available backends and their respective keyword arguments.
NotImplementedError
Requested backend is not supported.
Sort the table according to one or more keys. This operates on the existing table and does not return a new table.
str
or list
of str
The key(s) to order the table by. If None, use the primary index of the Table.
Sorting algorithm used by numpy.argsort
.
Sort in reverse order (default=False)
Examples
Create a table with 3 columns:
>>> t = Table([['Max', 'Jo', 'John'], ['Miller', 'Miller', 'Jackson'], ... [12, 15, 18]], names=('firstname', 'name', 'tel')) >>> print(t) firstname name tel --------- ------- --- Max Miller 12 Jo Miller 15 John Jackson 18
Sorting according to standard sorting rules, first ‘name’ then ‘firstname’:
>>> t.sort(['name', 'firstname']) >>> print(t) firstname name tel --------- ------- --- John Jackson 18 Jo Miller 15 Max Miller 12
Sorting according to standard sorting rules, first ‘firstname’ then ‘tel’, in reverse order:
>>> t.sort(['firstname', 'tel'], reverse=True) >>> print(t) firstname name tel --------- ------- --- Max Miller 12 John Jackson 18 Jo Miller 15
Return a pandas.DataFrame
instance.
The index of the created DataFrame is controlled by the index
argument. For index=True
or the default None
, an index will be specified for the DataFrame if there is a primary key index on the Table and if it corresponds to a single column. If index=False
then no DataFrame index will be specified. If index
is the name of a column in the table then that will be the DataFrame index.
In addition to vanilla columns or masked columns, this supports Table mixin columns like Quantity, Time, or SkyCoord. In many cases these objects have no analog in pandas and will be converted to a “encoded” representation using only Column or MaskedColumn. The exception is Time or TimeDelta columns, which will be converted to the corresponding representation in pandas using np.datetime64
or np.timedelta64
. See the example below.
None
, bool, str
Specify DataFrame index mode
Convert integer MaskedColumn to pandas nullable integer type. If use_nullable_int=False
then the column is converted to float with NaN.
pandas.DataFrame
A pandas pandas.DataFrame
instance
ImportError
If pandas is not installed
ValueError
If the Table has multi-dimensional columns
Examples
Here we convert a table with a few mixins to a pandas.DataFrame
instance.
>>> import pandas as pd >>> from astropy.table import QTable >>> import astropy.units as u >>> from astropy.time import Time, TimeDelta >>> from astropy.coordinates import SkyCoord
>>> q = [1, 2] * u.m >>> tm = Time([1998, 2002], format='jyear') >>> sc = SkyCoord([5, 6], [7, 8], unit='deg') >>> dt = TimeDelta([3, 200] * u.s)
>>> t = QTable([q, tm, sc, dt], names=['q', 'tm', 'sc', 'dt'])
>>> df = t.to_pandas(index='tm') >>> with pd.option_context('display.max_columns', 20): ... print(df) q sc.ra sc.dec dt tm 1998-01-01 1.0 5.0 7.0 0 days 00:00:03 2002-01-01 2.0 6.0 8.0 0 days 00:03:20
Perform a dictionary-style update and merge metadata.
The argument other
must be a Table
, or something that can be used to initialize a table. Columns from (possibly converted) other
are added to this table. In case of matching column names the column from this table is replaced with the one from other
. If other
is a Table
instance then |=
is available as alternate syntax for in-place update and |
can be used merge data to a new table.
Data to update this table with.
Whether the updated columns should be copies of or references to the originals.
Examples
Update a table with another table:
>>> t1 = Table({'a': ['foo', 'bar'], 'b': [0., 0.]}, meta={'i': 0}) >>> t2 = Table({'b': [1., 2.], 'c': [7., 11.]}, meta={'n': 2}) >>> t1.update(t2) >>> t1 <Table length=2> a b c str3 float64 float64 ---- ------- ------- foo 1.0 7.0 bar 2.0 11.0 >>> t1.meta {'i': 0, 'n': 2}
Update a table with a dictionary:
>>> t = Table({'a': ['foo', 'bar'], 'b': [0., 0.]}) >>> t.update({'b': [1., 2.]}) >>> t <Table length=2> a b str3 float64 ---- ------- foo 1.0 bar 2.0
Element-wise comparison of table with another table, list, or scalar.
Returns a Table
with the same columns containing boolean values showing result of comparison.
object
or list
or scalar
Object to compare with table
Examples
Compare one Table with other:
>>> t1 = Table([[1, 2], [4, 5], [-7, 8]], names=('a', 'b', 'c')) >>> t2 = Table([[1, 2], [-4, 5], [7, 8]], names=('a', 'b', 'c')) >>> t1.values_equal(t2) <Table length=2> a b c bool bool bool ---- ----- ----- True False False True True True
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4