Source code for perun.io.pandas

"""Pandas IO module."""

from pathlib import Path
from typing import Any

import pandas as pd

from perun.data_model.data import DataNode


[docs] def exportCSV(outputPath: Path, dataNode: DataNode, mr_id: str) -> None: """Export data node to csv format. Parameters ---------- outputPath : Path Path to export data to. dataNode : DataNode Perun data node. mr_id : str Id of Multi_run node to get data from """ columns = [ "run id", "hostname", "device_group", "sensor", "unit", "magnitude", "timestep", "value", ] rows = [] mrNode = dataNode.nodes[mr_id] for run_n, runNode in mrNode.nodes.items(): rows.extend(_rowsFromRunNode(runNode, run_n)) df = pd.DataFrame(rows, columns=columns) df.to_csv(outputPath)
def _rowsFromRunNode(runNode: DataNode, run_n: int) -> list[tuple[Any, ...]]: """Create table rows from a RUN type data node. Parameters ---------- runNode : DataNode RUN type node run_n : int Id number of data node Returns ------- list[tuple[Any, ...]] List of tuples with table entries. """ rows: list[tuple[Any, ...]] = [] for hostId, hostNode in runNode.nodes.items(): for deviceGroupId, deviceGroupNode in hostNode.nodes.items(): for sensorId, sensorNode in deviceGroupNode.nodes.items(): if sensorNode.raw_data is not None: rawData = sensorNode.raw_data unit = rawData.v_md.unit.value mag = rawData.v_md.mag.value for i in range(len(rawData.timesteps)): rows.append( ( run_n, hostId, deviceGroupId, sensorId, unit, mag, rawData.timesteps[i], rawData.values[i], ) ) return rows