Source code for allensdk.brain_observatory.behavior.behavior_project_cache.tables.project_table
from abc import abstractmethod, ABC
from typing import Optional, Iterable
import pandas as pd
[docs]class ProjectTable(ABC):
"""Class for storing and manipulating project-level data"""
def __init__(self, df: pd.DataFrame,
suppress: Optional[Iterable[str]] = None):
"""
Parameters
----------
df
The project-level data
suppress
columns to drop from table
"""
self._df = df
if suppress is not None:
suppress = list(suppress)
self._suppress = suppress
self.postprocess()
@property
def table(self):
return self._df
[docs] def postprocess_base(self):
"""Postprocessing to apply to all project-level data"""
# Make sure the index is not duplicated (it is rare)
self._df = self._df[~self._df.index.duplicated()].copy()
[docs] def postprocess(self):
"""Postprocess loop"""
self.postprocess_base()
self.postprocess_additional()
if self._suppress:
self._df.drop(columns=self._suppress, inplace=True,
errors="ignore")
[docs] @abstractmethod
def postprocess_additional(self):
"""Additional postprocessing should be overridden by subclassess"""
raise NotImplementedError()