|
|
@@ -8,6 +8,8 @@ import time
|
|
|
from pathlib import Path
|
|
|
from typing import Optional
|
|
|
|
|
|
+import pandas as pd
|
|
|
+
|
|
|
from core.config import PipelineConfig
|
|
|
from core.data_provider import DataProvider
|
|
|
from core.shared_state import SharedState
|
|
|
@@ -84,6 +86,21 @@ class DiagnosisAdapter:
|
|
|
duration_minutes=self.config.diagnosis_interval_minutes,
|
|
|
)
|
|
|
|
|
|
+ # 转为 api_predict 期望的格式:第一列为 time,后续为传感器值
|
|
|
+ # 并用线性插值补齐缺失,确保降采样后有足够的数据行
|
|
|
+ df = df.reset_index().rename(columns={"index": "time"})
|
|
|
+ df["time"] = pd.to_datetime(df["time"], errors="coerce")
|
|
|
+ df = df.dropna(subset=["time"]).sort_values("time")
|
|
|
+
|
|
|
+ # 以 4s 间隔重建完整时间轴,插值填充间隙
|
|
|
+ if len(df) >= 2:
|
|
|
+ full_idx = pd.date_range(start=df["time"].min(), end=df["time"].max(), freq="4s")
|
|
|
+ df = df.set_index("time")
|
|
|
+ df = df.reindex(full_idx)
|
|
|
+ df = df.interpolate(method="time", limit_direction="both")
|
|
|
+ df = df.ffill().bfill()
|
|
|
+ df = df.reset_index().rename(columns={"index": "time"})
|
|
|
+
|
|
|
# 执行诊断
|
|
|
result = self._diagnoser.api_predict(df, mode="auto")
|
|
|
|