From ee54c1158b44a1b801813b10c89b4cc66cbff2dd Mon Sep 17 00:00:00 2001 From: Ayush Ojha Date: Sat, 31 Jan 2026 02:03:31 -0800 Subject: [PATCH] Fix ExpressionDFilter treating missing data as passing the filter fillna(False) before astype("bool") in _filterSeries so that NaN values from missing feature data (e.g. during trading halts) are treated as not passing the filter instead of incorrectly passing. pandas astype("bool") converts NaN to True, which caused instruments with missing data to be included as if they satisfied the filter expression. Fixes #2084 --- qlib/data/filter.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/qlib/data/filter.py b/qlib/data/filter.py index 246d6baf765..a2e02039c8d 100644 --- a/qlib/data/filter.py +++ b/qlib/data/filter.py @@ -142,7 +142,7 @@ def _filterSeries(self, timestamp_series, filter_series): the series of bool value indicating whether the date satisfies the filter condition and exists in target timestamp. """ fstart, fend = list(filter_series.keys())[0], list(filter_series.keys())[-1] - filter_series = filter_series.astype("bool") # Make sure the filter_series is boolean + filter_series = filter_series.fillna(False).astype("bool") # NaN means missing data, treat as not passing timestamp_series[fstart:fend] = timestamp_series[fstart:fend] & filter_series return timestamp_series