| _pandas = None |
| _WITH_PANDAS = None |
|
|
|
|
| def _try_import_pandas() -> bool: |
| try: |
| import pandas |
| global _pandas |
| _pandas = pandas |
| return True |
| except ImportError: |
| return False |
|
|
|
|
| |
| def _with_pandas() -> bool: |
| global _WITH_PANDAS |
| if _WITH_PANDAS is None: |
| _WITH_PANDAS = _try_import_pandas() |
| return _WITH_PANDAS |
|
|
|
|
| class PandasWrapper: |
| @classmethod |
| def create_dataframe(cls, data, columns): |
| if not _with_pandas(): |
| raise Exception("DataFrames prototype requires pandas to function") |
| return _pandas.DataFrame(data, columns=columns) |
|
|
| @classmethod |
| def is_dataframe(cls, data): |
| if not _with_pandas(): |
| return False |
| return isinstance(data, _pandas.core.frame.DataFrame) |
|
|
| @classmethod |
| def is_column(cls, data): |
| if not _with_pandas(): |
| return False |
| return isinstance(data, _pandas.core.series.Series) |
|
|
| @classmethod |
| def iterate(cls, data): |
| if not _with_pandas(): |
| raise Exception("DataFrames prototype requires pandas to function") |
| for d in data.itertuples(index=False): |
| yield d |
|
|
| @classmethod |
| def concat(cls, buffer): |
| if not _with_pandas(): |
| raise Exception("DataFrames prototype requires pandas to function") |
| return _pandas.concat(buffer) |
|
|
| @classmethod |
| def get_item(cls, data, idx): |
| if not _with_pandas(): |
| raise Exception("DataFrames prototype requires pandas to function") |
| return data[idx: idx + 1] |
|
|
| @classmethod |
| def get_len(cls, df): |
| if not _with_pandas(): |
| raise Exception("DataFrames prototype requires pandas to function") |
| return len(df.index) |
|
|
| @classmethod |
| def get_columns(cls, df): |
| if not _with_pandas(): |
| raise Exception("DataFrames prototype requires pandas to function") |
| return list(df.columns.values.tolist()) |
|
|
|
|
| |
| default_wrapper = PandasWrapper |
|
|
|
|
| def get_df_wrapper(): |
| return default_wrapper |
|
|
|
|
| def set_df_wrapper(wrapper): |
| global default_wrapper |
| default_wrapper = wrapper |
|
|
|
|
| def create_dataframe(data, columns=None): |
| wrapper = get_df_wrapper() |
| return wrapper.create_dataframe(data, columns) |
|
|
|
|
| def is_dataframe(data): |
| wrapper = get_df_wrapper() |
| return wrapper.is_dataframe(data) |
|
|
|
|
| def get_columns(data): |
| wrapper = get_df_wrapper() |
| return wrapper.get_columns(data) |
|
|
|
|
| def is_column(data): |
| wrapper = get_df_wrapper() |
| return wrapper.is_column(data) |
|
|
|
|
| def concat(buffer): |
| wrapper = get_df_wrapper() |
| return wrapper.concat(buffer) |
|
|
|
|
| def iterate(data): |
| wrapper = get_df_wrapper() |
| return wrapper.iterate(data) |
|
|
|
|
| def get_item(data, idx): |
| wrapper = get_df_wrapper() |
| return wrapper.get_item(data, idx) |
|
|
|
|
| def get_len(df): |
| wrapper = get_df_wrapper() |
| return wrapper.get_len(df) |
|
|