Module transformnd.adapters.pandas

Adapt pandas DataFrames for transformation.

Expand source code
"""Adapt pandas DataFrames for transformation."""
from typing import Hashable, List

import pandas as pd

from ..base import Transform
from .base import BaseAdapter


class DataFrameAdapter(BaseAdapter[pd.DataFrame]):
    def __init__(self, columns: List[Hashable]):
        """Adapt transformation for coordinates stored in a pandas DataFrame.

        Parameters
        ----------
        columns : list of keys
            Keys for columns containing coordinates, e.g. `["x", "y", "z"]`
        """
        self.columns = columns

    def apply(
        self, transform: Transform, df: pd.DataFrame, in_place=False
    ) -> pd.DataFrame:
        """Transform the dataframe, optionally in-place.

        Parameters
        ----------
        transform : Transform
        df : pd.DataFrame

        in_place : bool, optional
            Whether to mutate the dataframe in place,
            by default False (i.e. make a copy of it).

        Returns
        -------
        pandas.DataFrame
        """
        coords = df[self.columns].to_numpy()
        transformed = transform.apply(coords)
        if not in_place:
            df = df.copy()
        df[self.columns] = transformed
        return df

Classes

class DataFrameAdapter (columns: List[Hashable])

Abstract base class for generic types.

A generic type is typically declared by inheriting from this class parameterized with one or more type variables. For example, a generic mapping type might be defined as::

class Mapping(Generic[KT, VT]): def getitem(self, key: KT) -> VT: … # Etc.

This class can then be used as follows::

def lookup_name(mapping: Mapping[KT, VT], key: KT, default: VT) -> VT: try: return mapping[key] except KeyError: return default

Adapt transformation for coordinates stored in a pandas DataFrame.

Parameters

columns : list of keys
Keys for columns containing coordinates, e.g. ["x", "y", "z"]
Expand source code
class DataFrameAdapter(BaseAdapter[pd.DataFrame]):
    def __init__(self, columns: List[Hashable]):
        """Adapt transformation for coordinates stored in a pandas DataFrame.

        Parameters
        ----------
        columns : list of keys
            Keys for columns containing coordinates, e.g. `["x", "y", "z"]`
        """
        self.columns = columns

    def apply(
        self, transform: Transform, df: pd.DataFrame, in_place=False
    ) -> pd.DataFrame:
        """Transform the dataframe, optionally in-place.

        Parameters
        ----------
        transform : Transform
        df : pd.DataFrame

        in_place : bool, optional
            Whether to mutate the dataframe in place,
            by default False (i.e. make a copy of it).

        Returns
        -------
        pandas.DataFrame
        """
        coords = df[self.columns].to_numpy()
        transformed = transform.apply(coords)
        if not in_place:
            df = df.copy()
        df[self.columns] = transformed
        return df

Ancestors

Methods

def apply(self, transform: Transform, df: pandas.core.frame.DataFrame, in_place=False) ‑> pandas.core.frame.DataFrame

Transform the dataframe, optionally in-place.

Parameters

transform : Transform
 
df : pd.DataFrame
 
in_place : bool, optional
Whether to mutate the dataframe in place, by default False (i.e. make a copy of it).

Returns

pandas.DataFrame
 
Expand source code
def apply(
    self, transform: Transform, df: pd.DataFrame, in_place=False
) -> pd.DataFrame:
    """Transform the dataframe, optionally in-place.

    Parameters
    ----------
    transform : Transform
    df : pd.DataFrame

    in_place : bool, optional
        Whether to mutate the dataframe in place,
        by default False (i.e. make a copy of it).

    Returns
    -------
    pandas.DataFrame
    """
    coords = df[self.columns].to_numpy()
    transformed = transform.apply(coords)
    if not in_place:
        df = df.copy()
    df[self.columns] = transformed
    return df

Inherited members