Parent
#176
What to build
Update MissingnessProfiler._profile_column in profiling/_missingness_profiler.py to accept an optional string_sentinels: list[str] | None parameter (default None).
When string_sentinels is provided and the column is String/Utf8, the eff_null boolean mask uses only the declared values (case-insensitive) for sentinel matching — the hardcoded _SENTINEL_STRINGS set is not applied for that column. Empty/whitespace-only strings are always included in the mask regardless of any declaration.
_run() passes profile_config.string_sentinels.get(col_name) for each column so the profiler reads declared sentinels from config without structural changes to its call signature from the orchestrator.
When string_sentinels=None, output is identical to the current behaviour — hardcoded _SENTINEL_STRINGS apply.
Acceptance criteria
Blocked by
Parent
#176
What to build
Update
MissingnessProfiler._profile_columninprofiling/_missingness_profiler.pyto accept an optionalstring_sentinels: list[str] | Noneparameter (defaultNone).When
string_sentinelsis provided and the column is String/Utf8, theeff_nullboolean mask uses only the declared values (case-insensitive) for sentinel matching — the hardcoded_SENTINEL_STRINGSset is not applied for that column. Empty/whitespace-only strings are always included in the mask regardless of any declaration._run()passesprofile_config.string_sentinels.get(col_name)for each column so the profiler reads declared sentinels from config without structural changes to its call signature from the orchestrator.When
string_sentinels=None, output is identical to the current behaviour — hardcoded_SENTINEL_STRINGSapply.Acceptance criteria
_profile_columngainsstring_sentinels: list[str] | None = Noneeffective_null_countalongside standard Polars nullseffective_null_ratioreflects the declaration-inclusive countMinor/Moderate/High/Severe) uses the declaration-inclusive ratioDropCandidateflagstring_sentinels=None, output is identical to current behaviour (no regression)tests/unit/profiling/test_missingness_profiler.pycovering all criteria aboveBlocked by