Source code for gaiaxpy.input_reader.dataframe_reader

from numpy import ndarray
from pandas import isnull
from .dataframe_numpy_array_reader import DataFrameNumPyArrayReader
from .dataframe_string_array_reader import DataFrameStringArrayReader
from gaiaxpy.core import array_to_symmetric_matrix

matrix_columns = [('bp_n_parameters', 'bp_coefficient_correlations'),
                  ('rp_n_parameters', 'rp_coefficient_correlations')]


[docs]def extremes_are_enclosing(first_row, column): if first_row[column][0] == '[' and first_row[column][-1] == ']': return True elif first_row[column][0] == '(' and first_row[column][-1] == ')': return True else: return False
[docs]def needs_matrix_conversion(array_columns): columns_to_matrix = [column for value, column in matrix_columns] return set(columns_to_matrix).intersection(set(array_columns))
[docs]class DataFrameReader(object): def __init__(self, content): self.content = content.copy() def _read_df(self): content = self.content columns = content.columns first_row = content.iloc[0] str_array_columns = [column for column in columns if isinstance(first_row[column], str) and extremes_are_enclosing(first_row, column)] np_array_columns = [column for column in columns if isinstance(first_row[column], ndarray)] if str_array_columns: # Call string reader data = DataFrameStringArrayReader(content, str_array_columns)._parse() array_columns = str_array_columns elif np_array_columns: data = DataFrameNumPyArrayReader(content, np_array_columns)._parse() array_columns = np_array_columns # Nothing to parse else: data = content array_columns = [] if needs_matrix_conversion(array_columns): for index, row in data.iterrows(): for size_column, values_column in matrix_columns: try: data[values_column][index] = array_to_symmetric_matrix( data[size_column][index].astype(int), row[values_column]) except AttributeError as err: if isnull(data[size_column][index]): continue return data, None # No extension for dataframes