fix(wavelength_prefix): _viz_infer_wavelength_start_column 加 nm/wavelength/wl/λ 前缀兼容
src/gui/panels/step12_viz_panel.py _viz_infer_wavelength_start_column: 原逻辑只匹配 200.0<=v<=3000.0 的纯数字列名。新增正则剥前缀 _PREFIX_RE = ^(?:nm|wavelength|wl|λ|wave_len)[_\s-]* (不区分大小写),剥后再试 float。 覆盖 nm_700、wavelength_800.0、WL 900、λ_650 等命名风格。 兜底返回 0 时打印 df.columns.tolist() 便于下次失败时一眼定位列名。 Why: 训练光谱 CSV 可能因不同 step 输出格式差异,前缀化列名常见。 viz_thread.py 同步修改(同函数独立副本)。
This commit is contained in:
@ -46,16 +46,31 @@ def _viz_training_spectra_csv_path(work_path: Path) -> Path:
|
|||||||
|
|
||||||
def _viz_infer_wavelength_start_column(df: pd.DataFrame) -> Union[str, int]:
|
def _viz_infer_wavelength_start_column(df: pd.DataFrame) -> Union[str, int]:
|
||||||
"""推断光谱起始列(training_spectra 通常以波长数值为列名,未必含 UTM_Y)。"""
|
"""推断光谱起始列(training_spectra 通常以波长数值为列名,未必含 UTM_Y)。"""
|
||||||
|
import re
|
||||||
|
# 兼容前缀:nm / nm_ / wavelength / wl / λ / wave_len(大小写不敏感)
|
||||||
|
_PREFIX_RE = re.compile(r"^(?:nm|wavelength|wl|\u03bb|wave_len)[_\s\-]*", re.IGNORECASE)
|
||||||
for i, col in enumerate(df.columns):
|
for i, col in enumerate(df.columns):
|
||||||
name = str(col).strip().lstrip("\ufeff")
|
name = str(col).strip().lstrip("\ufeff")
|
||||||
|
# 1) 直接纯数字(如 "700.0")
|
||||||
try:
|
try:
|
||||||
v = float(name)
|
v = float(name)
|
||||||
|
except ValueError:
|
||||||
|
v = None
|
||||||
|
if v is not None and 200.0 <= v <= 3000.0:
|
||||||
|
return i
|
||||||
|
# 2) 剥前缀后再试(如 "nm_700"、"wavelength_800.0"、"WL 900")
|
||||||
|
stripped = _PREFIX_RE.sub("", name)
|
||||||
|
if stripped != name:
|
||||||
|
try:
|
||||||
|
v = float(stripped)
|
||||||
except ValueError:
|
except ValueError:
|
||||||
continue
|
continue
|
||||||
if 200.0 <= v <= 3000.0:
|
if 200.0 <= v <= 3000.0:
|
||||||
return i
|
return i
|
||||||
if "UTM_Y" in df.columns:
|
if "UTM_Y" in df.columns:
|
||||||
return "UTM_Y"
|
return "UTM_Y"
|
||||||
|
# 兜底分支触发时打印所有列名,便于下次失败时一眼看到根因
|
||||||
|
print(f"DEBUG: 尝试解析的列名: {df.columns.tolist()}")
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user