Skip to content

omnipy.components.pandas.models

CLASS DESCRIPTION
PandasModel

PandasModel

Bases: Model['pd.DataFrame | pd.Series | AnyJsonTableType'], PrintableTable

METHOD DESCRIPTION
from_data
from_json
to_data
to_json
Source code in src/omnipy/components/pandas/models.py
class PandasModel(Model['pd.DataFrame | pd.Series | AnyJsonTableType'], PrintableTable):
    if TYPE_CHECKING:

        def __new__(cls, *args: Any, **kwargs: Any) -> 'PandasModel_DataFrame':
            ...

    @classmethod
    def _parse_data(
        cls,
        data: 'pd.DataFrame | pd.Series | AnyJsonTableType',
    ) -> 'pd.DataFrame | pd.Series':
        from .lazy_import import pd

        if isinstance(data, pd.DataFrame) or isinstance(data, pd.Series):
            return data

        return cls._from_iterable(data)

    # @staticmethod
    # def _data_column_names_are_strings(data: pd.DataFrame) -> None:
    #     for column in data.columns:
    #         assert isinstance(column, str)

    # @staticmethod
    # def _data_not_empty_object(data: pd.DataFrame) -> None:
    #     assert not any(data.isna().all(axis=1))
    #

    @classmethod
    def _from_iterable(cls, data: Iterable) -> 'pd.DataFrame':
        from .lazy_import import pd
        return pd.DataFrame(data.content if is_model_instance(data) else data).convert_dtypes()

    def to_data(self) -> Any:
        from .lazy_import import pd

        df = self.content.replace({pd.NA: None})
        if isinstance(df, pd.DataFrame):
            # return df.to_dict(orient='records')
            return df.to_dict(orient='list')
        elif isinstance(df, pd.Series):
            return df.to_dict()

    def from_data(self, data: Iterable) -> None:
        self._validate_and_set_value(self._from_iterable(data))

    def from_json(self, json_content: str) -> None:
        from .lazy_import import pd

        self._validate_and_set_value(pd.read_json(StringIO(json_content)).convert_dtypes())

    def to_json(self, pretty=True) -> str:
        from .lazy_import import pd

        if isinstance(self.content, pd.DataFrame):
            return self.content.to_json(orient='records')
        elif isinstance(self.content, pd.Series):
            return self.content.to_json()
        else:
            raise ShouldNotOccurException()

from_data

from_data(data: Iterable) -> None
Source code in src/omnipy/components/pandas/models.py
def from_data(self, data: Iterable) -> None:
    self._validate_and_set_value(self._from_iterable(data))

from_json

from_json(json_content: str) -> None
Source code in src/omnipy/components/pandas/models.py
def from_json(self, json_content: str) -> None:
    from .lazy_import import pd

    self._validate_and_set_value(pd.read_json(StringIO(json_content)).convert_dtypes())

to_data

to_data() -> Any
Source code in src/omnipy/components/pandas/models.py
def to_data(self) -> Any:
    from .lazy_import import pd

    df = self.content.replace({pd.NA: None})
    if isinstance(df, pd.DataFrame):
        # return df.to_dict(orient='records')
        return df.to_dict(orient='list')
    elif isinstance(df, pd.Series):
        return df.to_dict()

to_json

to_json(pretty=True) -> str
Source code in src/omnipy/components/pandas/models.py
def to_json(self, pretty=True) -> str:
    from .lazy_import import pd

    if isinstance(self.content, pd.DataFrame):
        return self.content.to_json(orient='records')
    elif isinstance(self.content, pd.Series):
        return self.content.to_json()
    else:
        raise ShouldNotOccurException()

PandasModel_DataFrame

Bases: PandasModel, pd.DataFrame

Source code in src/omnipy/components/pandas/models.py
class PandasModel_DataFrame(PandasModel, pd.DataFrame):
    ...