Source code for ds_provider_xledger_py_lib.utils.dataframe

"""
**File:** ``dataframe.py``
**Region:** ``ds_provider_xledger_py_lib/utils``

Description
-----------
Small dataframe helpers shared by serializer and deserializer.
"""

from __future__ import annotations

from typing import Any

import pandas as pd


[docs] def dataframe_to_records(df: pd.DataFrame) -> list[dict[str, Any]]: """Convert dataframe rows to JSON-safe records with ``None`` for nulls. Args: df: Input dataframe. Returns: List of row dictionaries. """ return [{str(k): (None if pd.isna(v) else v) for k, v in record.items()} for record in df.to_dict("records")]
[docs] def edges_to_dataframe( *, edges: list[dict[str, Any]], columns: list[str] | None = None, ) -> pd.DataFrame: """Flatten ``edges[].node`` payload into a dataframe. Args: edges: GraphQL connection edges. columns: Optional explicit column order/filter. Returns: Flattened dataframe. """ nodes = [node for edge in edges if isinstance(edge, dict) if isinstance(node := edge.get("node"), dict)] df = pd.json_normalize(nodes, sep="_") if columns: return df.reindex(columns=columns) return df