# File: extractor.py # Copyright (C) 2026 Erick Ahmed # SPDX-License-Identifier: AGPL-3.0-or-later import json from pathlib import Path import pandas as pd def extract_id(row: pd.Series) -> str: """Extracts PGN from metadata or falls back to CAN ID.""" meta = row.get('j1939_metadata') if pd.isna(meta): return f"ID: {row['ID']}" if isinstance(meta, str): try: meta = json.loads(meta) except json.JSONDecodeError: return f"ID: {row['ID']}" if isinstance(meta, dict) and 'PGN' in meta: return f"PGN: {meta['PGN']}" return f"ID: {row['ID']}" def load_data(file_path: Path) -> pd.DataFrame: """Loads Parquet file and adds an Identifier column.""" df = pd.read_parquet(file_path) df['Identifier'] = df.apply(extract_id, axis=1) return df