37 lines
1.2 KiB
Python
37 lines
1.2 KiB
Python
"""CSV 读取模块:读 timestamp,value,label 三列,返回归一化元组。"""
|
|
|
|
from pathlib import Path
|
|
import pandas as pd
|
|
|
|
|
|
def read_csv(path: str | Path, value_col: str = "value") -> tuple[list[int], list[float], list[int]]:
|
|
"""读 timestamp,value,label CSV 文件。
|
|
|
|
Args:
|
|
path: CSV 文件路径
|
|
value_col: 数值列名 (default: "value")
|
|
|
|
Returns:
|
|
(timestamps_ms, values, labels) 三元组
|
|
- timestamps_ms: 毫秒精度 Unix 时间戳
|
|
- values: 浮点数值列表
|
|
- labels: 整数标签列表(0=正常, 1=异常)
|
|
|
|
Raises:
|
|
FileNotFoundError: 文件不存在
|
|
ValueError: 缺少 timestamp 或 value 列
|
|
"""
|
|
df = pd.read_csv(path)
|
|
|
|
if "timestamp" not in df.columns or value_col not in df.columns:
|
|
raise ValueError(f"CSV 缺少 timestamp 或 {value_col} 列: {path}")
|
|
|
|
timestamps = pd.to_datetime(df["timestamp"])
|
|
timestamps_ms = (timestamps.astype("int64") // 10**6).tolist()
|
|
|
|
values = df[value_col].astype(float).tolist()
|
|
|
|
labels = df["label"].fillna(0).astype(int).tolist() if "label" in df.columns else [0] * len(df)
|
|
|
|
return timestamps_ms, values, labels
|