8000 FIX Do not call get_feature_names for empty column selections (#19579) · scikit-learn/scikit-learn@15c2c72 · GitHub
[go: up one dir, main page]

Skip to content

Commit 15c2c72

Browse files
authored
FIX Do not call get_feature_names for empty column selections (#19579)
1 parent 0df7abf commit 15c2c72

File tree

3 files changed

+18
-2
lines changed

3 files changed

+18
-2
lines changed

doc/whats_new/v0.24.rst

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,13 @@ Version 0.24.2
1212
Changelog
1313
---------
1414

15+
:mod:`sklearn.compose`
16+
......................
17+
18+
- |Fix| :meth:`compose.ColumnTransformer.get_feature_names` does not call
19+
:term:`get_feature_names` on transformers with an empty column selection.
20+
:pr:`19579` by `Thomas Fan`_.
21+
1522
:mod:`sklearn.ensemble`
1623
.......................
1724

sklearn/compose/_column_transformer.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -351,8 +351,7 @@ def get_feature_names(self):
351351
check_is_fitted(self)
352352
feature_names = []
353353
for name, trans, column, _ in self._iter(fitted=True):
354-
if trans == 'drop' or (
355-
hasattr(column, '__len__') and not len(column)):
354+
if trans == 'drop' or _is_empty_column_selection(column):
356355
continue
357356
if trans == 'passthrough':
358357
if self._feature_names_in is not None:

sklearn/compose/tests/test_column_transformer.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1420,3 +1420,13 @@ def test_sk_visual_block_remainder_fitted_numpy(remainder):
14201420
assert visual_block.names == ('scale', 'remainder')
14211421
assert visual_block.name_details == ([0, 2], [1])
14221422
assert visual_block.estimators == (scaler, remainder)
1423+
1424+
1425+
@pytest.mark.parametrize("selector", [[], [False, False]])
1426+
def test_get_feature_names_empty_selection(selector):
1427+
"""Test that get_feature_names is only called for transformers that
1428+
were selected. Non-regression test for #19550.
1429+
"""
1430+
ct = ColumnTransformer([('ohe', OneHotEncoder(drop='first'), selector)])
1431+
ct.fit([[1, 2], [3, 4]])
1432+
assert ct.get_feature_names() == []

0 commit comments

Comments
 (0)
0