guzhujushi
b6dc4bc5a6
feat(data): detect_outliers 收尾(文本列恒 False)+ 补测试与文档
实现(用户本人写 + Codex 轻度收尾):
- 统计量(quantile / mean / std)与掩码写入都收窄到数值列,含文本列的赛题表不再崩
- 非数值列在掩码里恒 False(用户定的语义),docstring Notes 补上这条
- 删掉死代码 data=data.copy():下面的 to_frame()/pd.DataFrame() 本就返回新对象,
函数全程只读 data,白复制一份;且它排在类型分派之前,会把错误入参的报错
从 ValueError 变成 AttributeError
- 删掉那行死代码后 pyright 反而暴露 1 个真错:df[Index] 被类型存根当成 Series,
.std() 于是被判成标量、std.replace(...) 非法。在取列子表处 cast 成 DataFrame
按运行时真值收窄(详见 docs/04-environment.md 坑 8)
测试:
- test_detect_outliers_survives_text_columns 摘掉 xfail 并加强断言(文本列必须恒 False)
- 新增 test_detect_outliers_all_text_frame_returns_all_false,钉住"整表无数值列"边界
- 58 passed / 2 xfailed -> 60 passed / 1 xfailed;ruff 0;pyright 0
- 仅剩 1 条 xfail:impute_missing 的 mode 分支就地改调用方的表(要选语义,留给用户)
文档:
- STATUS.md:L0 5/12、验证结果表、下一步重写、新增决策 32(非数值列恒 False)
- docs/04-environment.md:新增坑 8(pandas 存根让 df[Index] 退化成 Series,及三种无效修法)
- docs/dev/personal-pitfalls.md:只追加第 8 条(限制掩码 ≠ 限制统计量)
- CHANGELOG.md:本轮变更
2026-10-02 15:41:08 +08:00
..
2026-10-01 17:43:48 +08:00
2026-10-01 17:43:48 +08:00
2026-10-01 19:38:59 +08:00
2026-10-02 15:41:08 +08:00
2026-10-01 17:43:48 +08:00
2026-10-01 17:43:48 +08:00
2026-10-01 17:43:48 +08:00
2026-10-01 17:43:48 +08:00
2026-10-01 17:43:48 +08:00