Source code for glotaran.builtin.io.pandas.xlsx

"""Module containing Excel like io support."""

from __future__ import annotations

import numpy as np
import pandas as pd

from glotaran.io import ProjectIoInterface
from glotaran.io import register_project_io
from glotaran.parameter import ParameterGroup
from glotaran.utils.io import safe_dataframe_fillna
from glotaran.utils.io import safe_dataframe_replace


[docs]@register_project_io(["xlsx", "ods"]) class ExcelProjectIo(ProjectIoInterface): """Plugin for Excel like data io."""
[docs] def load_parameters(self, file_name: str) -> ParameterGroup: """Load parameters from XLSX file. Parameters ---------- file_name : str Name of file to be loaded. Returns ------- :class:`ParameterGroup """ df = pd.read_excel(file_name, na_values=["None", "none"]) safe_dataframe_fillna(df, "minimum", -np.inf) safe_dataframe_fillna(df, "maximum", np.inf) return ParameterGroup.from_dataframe(df, source=file_name)
[docs] def save_parameters( self, parameters: ParameterGroup, file_name: str, *, as_optimized: bool = True ): """Save a :class:`ParameterGroup` to a Excel file. Parameters ---------- parameters : ParameterGroup Parameters to be saved to file. file_name : str File to write the parameters to. as_optimized : bool Whether to include properties which are the result of optimization. """ df = parameters.to_dataframe(as_optimized=as_optimized) safe_dataframe_replace(df, "minimum", -np.inf, "") safe_dataframe_replace(df, "maximum", np.inf, "") df.to_excel(file_name, na_rep="None", index=False)