Source code for tables_io.conv.conv_tabledict

"""Multi-Table Convert Functions for tables_io"""

from collections import OrderedDict

import numpy as np
from typing import Mapping, Union

from .conv_table import (
    convert_table,
    convert_to_ap_table,
    convert_to_dataframe,
    convert_to_dict,
    convert_to_json,
    convert_to_pa_table,
    convert_to_recarray,
)
from ..utils.array_utils import force_to_pandables
from ..lazy_modules import apTable, fits, pd, pa
from ..types import (
    AP_TABLE,
    JSON_STRING,
    NUMPY_DICT,
    NUMPY_RECARRAY,
    PD_DATAFRAME,
    PA_TABLE,
    TABULAR_FORMAT_NAMES,
    TABULAR_FORMATS,
    is_table_like,
    table_type,
    tType_to_int,
)


### II.  Multi-table conversion utilities
[docs] def convert(obj, tType: Union[str, int]): """ Converts `Table-like` or `TableDict-like` objects to a specific tabular format. The given table format type must be one of the supported types listed below. If given a `TableDict-like` object, each of the `Table-like` objects in it are converted to the desired format. `convert_obj` is used to convert the `Table-like` objects. Accepted table formats: ================== =============== Format string Format integer ================== =============== "astropyTable" 0 "numpyDict" 1 "numpyRecarray" 2 "pandasDataFrame" 3 "pyarrowTable" 4 "jsonString" 5 ================== =============== Parameters ---------- obj : 'Table-like` or `TableDict-like` The input object. tType : `int` or `str` The table format to convert to. Returns ------- out : `Table-like` or `TableDict-like` The converted data. Example ------- Converting a `Table-like` object, in this case an `astropy.table.Table` object, to a `pyarrow.Table` object: >>> import tables_io >>> from astropy.table import Table >>> tab = Table([[1,2], [3,4]],names=('x','y')) >>> tables_io.convert(tab,'pyarrowTable') pyarrow.Table x: int64 y: int64 ---- x: [[1,2]] y: [[3,4]] """ if is_table_like(obj): return convert_table(obj, tType) funcMap = { AP_TABLE: convert_to_ap_tables, NUMPY_DICT: convert_to_dicts, NUMPY_RECARRAY: convert_to_recarrays, PA_TABLE: convert_to_pa_tables, PD_DATAFRAME: convert_to_dataframes, JSON_STRING: convert_to_json_strings, } # Convert tType to int if necessary int_tType = tType_to_int(tType) try: theFunc = funcMap[int_tType] except KeyError as msg: raise KeyError( f"Unsupported tabular type {int_tType} ({TABULAR_FORMATS[int_tType]}, must be one of {TABULAR_FORMAT_NAMES})" ) from msg return theFunc(obj)
[docs] def convert_to_ap_tables(odict: Mapping) -> Mapping: """ Convert several `objects` to `astropy.table.Table` Parameters ---------- odict : `Mapping`, (`str`, `Table-like`) The input objects Returns ------- tabs : `OrderedDict` of `astropy.table.Table` The tables """ return OrderedDict([(k, convert_to_ap_table(v)) for k, v in odict.items()])
[docs] def convert_to_dicts(odict: Mapping) -> Mapping: """ Convert several `objects` to `OrderedDict`, (`str`, `numpy.array`) Parameters ---------- odict : `Mapping`, (`str`, `Table-like`) The input objects Returns ------- tabs : `OrderedDict` of `OrderedDict`, (`str`, `numpy.array`) The tables """ return OrderedDict([(k, convert_to_dict(v)) for k, v in odict.items()])
[docs] def convert_to_recarrays(odict: Mapping) -> Mapping: """ Convert several `objects` to `np.recarray` Parameters ---------- odict : `Mapping`, (`str`, `Table-like`) The input objects Returns ------- tabs : `OrderedDict` of `np.recarray` The tables """ return OrderedDict([(k, convert_to_recarray(v)) for k, v in odict.items()])
[docs] def convert_to_pa_tables(odict: Mapping) -> Mapping: """ Convert several `objects` to `pa.Table` Parameters ---------- odict : `Mapping`, (`str`, `Table-like`) The input objects Returns ------- tabs : `OrderedDict` of `np.recarray` The tables """ return OrderedDict([(k, convert_to_pa_table(v)) for k, v in odict.items()])
[docs] def convert_to_dataframes(odict: Mapping) -> Mapping: """ Convert several `objects` to `pandas.DataFrame` Parameters ---------- odict : `Mapping`, (`str`, `Table-like`) The input objects Returns ------- df : `OrderedDict` of `pandas.DataFrame` The dataframes """ return OrderedDict([(k, convert_to_dataframe(v)) for k, v in odict.items()])
[docs] def convert_to_json_strings(odict: Mapping) -> Mapping: """ Convert several `objects` to json `str` Parameters ---------- odict : `Mapping`, (`str`, `Table-like`) The input objects Returns ------- df : `OrderedDict` of `str` The json strings """ return OrderedDict([(k, convert_to_json(v)) for k, v in odict.items()])