-
Missingness profile
-
-
-
-
- column dtype missing missing_pct disguised has_missing
-
- respondent_id object 0 0.0% 0 False
- age float64 187 8.7% 61 True
- region object 142 6.6% 142 True
- income float64 329 15.3% 118 True
- satisfaction float64 95 4.4% 40 True
- comments object 290 13.5% 290 True
-
-
-
-
-
-
Strategy
+
+ layers
+ Resolution order: per-column override → global strategy → preset . The most specific setting wins; layers it overrides are dimmed.
+
Preset
-
+
info Overridden by Global strategy → median (set under Advanced options). Presets apply only when global is “(use preset)”.
+
detect-only (standardize sentinels to NaN, no fill or drop)
safe-fill (numeric → median, categorical → mode)
drop-incomplete (drop any row with missing)
@@ -121,7 +126,7 @@
Strategy override
Global strategy
-
(use preset)
+
median
drop_row / drop_col use the thresholds below. mean / median / interpolate are numeric only — non-numeric columns fall back to the categorical strategy.
@@ -135,11 +140,11 @@
Row drop threshold (drop rows with ≥ this fraction missing across selected cols)
-
+
Column drop threshold (drop columns with ≥ this fraction missing)
-
+
@@ -164,13 +169,13 @@
Set a different strategy for specific columns. Leave any row blank to use the global strategy.
- Column Override
+ Column Override Resolves to
- age median
- region mode
- income
- satisfaction
- comments constant
+ age (global) median · global
+ region (global) mode · global → categorical fallback
+ income (global) median · global
+ satisfaction (global) median · global
+ comments constant constant · this column
@@ -198,28 +203,14 @@
Missingness — before vs. after
- column before_missing before_pct after_missing after_pct
+ column before_missing before_pct after_missing after_pct strategy
- respondent_id 0 0.0 0 0.0
- age 187 8.7 0 0.0
- region 142 6.6 0 0.0
- income 329 15.3 0 0.0
- satisfaction 95 4.4 0 0.0
- comments 290 13.5 0 0.0
-
-
-
-
-
Strategy applied per column
-
-
- column strategy
-
- age median
- region mode
- income median
- satisfaction median
- comments constant
+ respondent_id 0 0.0 0 0.0 —
+ age 187 8.7 0 0.0 median
+ region 142 6.6 0 0.0 mode
+ income 329 15.3 0 0.0 median
+ satisfaction 95 4.4 0 0.0 median
+ comments 290 13.5 0 0.0 constant
diff --git a/layout-review/app.css b/layout-review/app.css
index 11b3a04..9ce8263 100644
--- a/layout-review/app.css
+++ b/layout-review/app.css
@@ -330,6 +330,20 @@ code, .dt-mono { font-family: var(--font-mono); font-size: 0.92em; font-feature-
.dt-radio .dot { width: 16px; height: 16px; border-radius: 50%; border: 1px solid var(--border-strong); display: inline-block; flex-shrink: 0; }
.dt-radio.on .dot { border: 5px solid var(--ink); }
+/* Strategy precedence legend + overridden state (Fix Missing Values).
+ Makes the preset -> global -> per-column resolution order legible and
+ visibly dims a layer when a more specific layer wins. */
+.dt-precedence {
+ display: flex; align-items: center; gap: 8px;
+ background: var(--surface-hover); border: 1px solid var(--border);
+ border-radius: var(--r-md); padding: 9px 13px; margin: 0 0 14px;
+ font-size: 12.5px; color: var(--ink-secondary); line-height: 1.4;
+}
+.dt-precedence .dt-mi { font-family: "Material Symbols Outlined"; font-size: 18px; color: var(--ink-tertiary); flex-shrink: 0; }
+.dt-precedence strong { color: var(--ink); font-weight: 600; }
+.dt-radio-row.is-overridden { opacity: 0.5; }
+.dt-radio-row.is-overridden .dt-radio { text-decoration: line-through; text-decoration-color: var(--ink-tertiary); }
+
/* Slider */
.dt-slider { margin: 14px 0 6px; }
.dt-slider .track { position: relative; height: 4px; background: var(--border-strong); border-radius: 2px; }