Source code for pytimings.processing
from __future__ import annotations
from collections.abc import Iterable
from logging import getLogger
from pathlib import Path
from typing import TYPE_CHECKING
if TYPE_CHECKING:
import pandas as pd
logger = getLogger(__name__)
__all__ = ["csv_to_dataframe"]
[docs]
def csv_to_dataframe(filenames: Iterable[str | Path], sort: bool = False) -> pd.DataFrame:
"""Read csv files into a Pandas.DataFrame"""
try:
import pandas as pd
except ImportError as e: # pragma: no cover
raise ImportError(
"csv_to_dataframe requires pandas. Install the optional dependencies with 'pip install pytimings[plot]'."
) from e
if sort:
filenames = sorted(filenames)
tbls = [pd.read_csv(fn, index_col=0, header=0, names=[fn]) for fn in filenames]
timings_cols = [s for s in tbls[0].T.columns if "pytimings::data" not in s]
dataframe = pd.concat(tbls, axis=1).T
if not all(dataframe["pytimings::data::_sections"] == dataframe["pytimings::data::_sections"].iloc[0]):
raise ValueError("input csv files do not all contain the same sections")
if not all(dataframe["pytimings::data::_version"] == dataframe["pytimings::data::_version"].iloc[0]):
logger.warning("input csv files created from different pytimings versions")
for col in timings_cols:
dataframe[col] = pd.to_numeric(dataframe[col])
return dataframe