读数脚本:快照的 NaN 归一成 None,环节名空值不进索引

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
zlt 2026-09-04 09:14:03 +08:00
parent 5a2a51a2d0
commit 86727827ae
1 changed files with 18 additions and 3 deletions

View File

@ -99,7 +99,19 @@ def snapshot_of(day: str) -> dict:
except Exception as e: # noqa: BLE001 except Exception as e: # noqa: BLE001
print(f" (行业观点快照表读取失败,乙路整体缺席: {e!r}") print(f" (行业观点快照表读取失败,乙路整体缺席: {e!r}")
return {} return {}
return {str(r["cluster_key"]): dict(r) for _, r in df.iterrows()} if not df.empty else {} if df.empty:
return {}
# pandas 把空值读成 NaN而 NaN 是真值——直接往下传会让"没有上一版倾向"看着像有值。
# 全部归一成 None判据那边只认 None。
import math
def _n(v):
if v is None or (isinstance(v, float) and math.isnan(v)):
return None
return v
return {str(r["cluster_key"]): {k: _n(v) for k, v in r.items()}
for _, r in df.iterrows()}
def main(ds: str | None = None) -> None: def main(ds: str | None = None) -> None:
@ -121,8 +133,11 @@ def main(ds: str | None = None) -> None:
# 乙路按环节名对上主题:候选卡按环节,产业研判按主题聚簇,两者不在一个命名空间, # 乙路按环节名对上主题:候选卡按环节,产业研判按主题聚簇,两者不在一个命名空间,
# 这里只做同名匹配,对不上的票乙路就是缺失。这一路的天花板本来就低(实测 1.4%)。 # 这里只做同名匹配,对不上的票乙路就是缺失。这一路的天花板本来就低(实测 1.4%)。
by_seg = {(r.get("segment_name") or r.get("subject_name") or "").strip(): r by_seg = {}
for r in snaps.values()} for r in snaps.values():
name = str(r.get("segment_name") or r.get("subject_name") or "").strip()
if name:
by_seg[name] = r
seg_of = {} seg_of = {}
try: try:
d = db.read_pg("SELECT ts_code, target FROM v_factor_transmission_moved " d = db.read_pg("SELECT ts_code, target FROM v_factor_transmission_moved "