.. doctest-skip-all
.. _pandas:
Interfacing with the pandas package
***********************************
The `pandas `__ package is a package for high
performance data analysis of table-like structures that is complementary to the
:class:`~astropy.table.Table` class in Astropy.
In order to be able to easily exchange data between the :class:`~astropy.table.Table` class and the pandas `DataFrame`_ class (the main data structure in pandas), the :class:`~astropy.table.Table` class includes two methods, :meth:`~astropy.table.Table.to_pandas` and :meth:`~astropy.table.Table.from_pandas`.
To demonstrate these, we can create a simple table::
>>> from astropy.table import Table
>>> t = Table()
>>> t['a'] = [1, 2, 3, 4]
>>> t['b'] = ['a', 'b', 'c', 'd']
which we can then convert to a pandas `DataFrame`_::
>>> df = t.to_pandas()
>>> df
a b
0 1 a
1 2 b
2 3 c
3 4 d
>>> type(df)
It is also possible to create a table from a `DataFrame`_::
>>> t2 = Table.from_pandas(df)
>>> t2
a b
int64 string8
----- -------
1 a
2 b
3 c
4 d
The conversions to/from pandas are subject to the following caveats:
* The pandas `DataFrame`_ structure does not support multi-dimensional
columns, so :class:`~astropy.table.Table` objects with multi-dimensional
columns cannot be converted to `DataFrame`_.
* Masked tables can be converted, but `DataFrame`_ uses ``numpy.nan`` to
indicate masked values, so all numerical columns (integer or float) are
converted to ``numpy.float`` columns in `DataFrame`_, and string columns with
missing values are converted to object columns with ``numpy.nan`` values to
indicate missing values. For numerical columns, the conversion therefore does
not necessarily round-trip if converting back to an Astropy table, because the
distinction between ``numpy.nan`` and masked values is lost, and the different
for example integer columns will be converted to floating-point.
* Tables with mixin columns can currently not be converted, but this may be
implemented in the future.
.. _DataFrame: http://pandas-docs.github.io/pandas-docs-travis/