fix(factor): 三表跨股concat列序对齐——各股schema子集不同致vstack错配(真数据冒烟实锤) [nas]

NAS容器只读冒烟(3真股×2023)暴露: 合成数据列全同未触发,真数据各股文件
schema子集不同(银行模板缺列补尾部),pl.concat在select统一列序之前执行
→ ShapeError。修: frames append前先select统一列序/列集。

真数据冒烟同时锁定: 茅台ROE_TTM 34%/银行tacc置NaN(红线生效)/32表达式
全通过引擎/33特征31个覆盖健康;两断供列(ASSET_IMPAIRMENT_LOSS post-2020-09、
OTHER_RECE post-~2021)为数据层采集模板问题,adapter忠实保null,遗留清单在档。

[nas]

Co-Authored-By: Claude Code <noreply@anthropic.com>
This commit is contained in:
2026-09-08 00:50:29 +08:00
parent caa72d3426
commit 4f7f5c6f5d
+5 -2
View File
@@ -169,10 +169,13 @@ def _load_statements(codes: list[str], data_dir: str) -> pl.DataFrame:
if df is None:
continue
df = _norm_dates(df, _DATE_COLS)
frames.append(df.with_columns(pl.lit(vt).alias("vt_symbol")))
# 先统一列序/列集再入列(各股文件 schema 子集不同,concat 前必须对齐)
frames.append(
df.with_columns(pl.lit(vt).alias("vt_symbol"))
.select(["vt_symbol", *_DATE_COLS, *raw_cols]))
if not frames:
continue
merged = pl.concat(frames).select(["vt_symbol", *_DATE_COLS, *raw_cols])
merged = pl.concat(frames)
if table == "balance":
short = {c: c for c in raw_cols}
else: