Source code for piel.tools.virtuoso.simulation.data.time
from piel.types import MultiDataTimeSignal, DataTimeSignalData
from piel.conversion import read_csv_to_pandas
from .utils import sanitize_column_name
[docs]
def dataframe_to_multi_time_signal_data(df) -> MultiDataTimeSignal:
"""
Converts a DataFrame containing time and data columns into a list of `DataTimeSignalData` objects.
This function processes a DataFrame where each signal is represented by a pair of columns:
one for time (ending with " X") and one for the corresponding data values (ending with " Y").
It constructs `DataTimeSignalData` objects for each valid pair and returns them as a list.
Args:
df (pd.DataFrame): A DataFrame with columns representing time ('X') and data ('Y') pairs.
Returns:
MultiDataTimeSignal: A list of `DataTimeSignalData` objects, where each object represents a signal.
Example:
Input DataFrame:
Signal1 X | Signal1 Y | Signal2 X | Signal2 Y
--------- | --------- | --------- | ---------
0.0 | 10.0 | 0.0 | 20.0
1.0 | 15.0 | 1.0 | 25.0
Output:
[
DataTimeSignalData(time_s=[0.0, 1.0], data=[10.0, 15.0], data_name="Signal1"),
DataTimeSignalData(time_s=[0.0, 1.0], data=[20.0, 25.0], data_name="Signal2")
]
"""
import re
signals = []
# Loop through columns to identify "X" (time) and "Y" (data) pairs
for col in df.columns:
if col.endswith(" X"):
# Determine the base name of the signal
base_name = col[:-2] # Remove ' X'
y_col = f"{base_name} Y"
if y_col in df.columns:
# Generate a valid data_name by sanitizing the base name
data_name = sanitize_column_name(y_col)
# Create a DataTimeSignalData object for the identified signal
signal = DataTimeSignalData(
time_s=df[col].values,
data=df[y_col].values,
data_name=data_name,
)
signals.append(signal)
return signals