Source code for openmnglab.util.pandas
from typing import Iterable
import pandas as pd
[docs]def ensure_dataframe(inp: pd.Series | pd.DataFrame) -> pd.DataFrame:
if isinstance(inp, pd.Series):
return inp.to_frame()
elif isinstance(inp, pd.DataFrame):
return inp
raise Exception(f"No conversion from type '{type(inp)}' to DataFrame")
[docs]def index_names(inp: pd.Index | pd.MultiIndex) -> Iterable[str]:
"""Iterates over all index names of the passed index or multiindex.
:param inp: index or multiindex to yield the name(s) from
:return: An iterable of all names of the passed index
"""
if isinstance(inp, pd.MultiIndex):
yield from inp.names
elif isinstance(inp, pd.Index):
yield inp.name
else:
raise TypeError("Passed index is neither a pandas index nor a pandas multiindex")
[docs]def pandas_names(inp: pd.Series | pd.DataFrame) -> Iterable[str]:
"""Iterates over all index and column names of the passed series or dataframe.
:param inp: Series or dataframe to yield the names from
:return: An iterable of all index and column names
"""
yield from index_names(inp.index)
if isinstance(inp, pd.Series):
yield inp.name
elif isinstance(inp, pd.DataFrame):
yield from inp.columns
else:
raise TypeError("Passed index is neither a pandas series nor a pandas dataframe")
[docs]def iterdfcols(inp: pd.DataFrame) -> Iterable[tuple[str, pd.Series]]:
for col_name in inp.columns:
yield col_name, inp[col_name]