28 lines
833 B
Python
28 lines
833 B
Python
# 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
|