.. 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 exchange data between the :class:`~astropy.table.Table` class and the :class:`pandas.DataFrame` class (the main data structure in ``pandas``), the |Table| class includes two methods, :meth:`~astropy.table.Table.to_pandas` and :meth:`~astropy.table.Table.from_pandas`. Example ------- .. EXAMPLE START: Interfacing Tables with the Pandas Package To demonstrate, we can create a minimal 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 :class:`~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 :class:`~pandas.DataFrame`:: >>> t2 = Table.from_pandas(df) >>> t2 a b int64 string8 ----- ------- 1 a 2 b 3 c 4 d .. EXAMPLE END The conversions to and from ``pandas`` are subject to the following caveats: * The :class:`~pandas.DataFrame` structure does not support multidimensional columns, so |Table| objects with multidimensional columns cannot be converted to :class:`~pandas.DataFrame`. * Masked tables can be converted, but in columns of ``float`` or string values the resulting :class:`~pandas.DataFrame` uses `numpy.nan` to indicate missing values. For ``float`` 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. This is not a problem for integer columns. * Tables with :ref:`mixin_columns` can not be converted.