1515from sklearn .base import BaseEstimator
1616from sklearn .feature_selection import SelectorMixin
1717from sklearn .utils .validation import check_is_fitted
18+ from sklearn .utils ._set_output import _get_output_config
1819import warnings
1920
2021
@@ -240,7 +241,7 @@ def transform(self, X, weak=None, return_df=None):
240241 weak : boolean, optional
241242 Deprecated. Set ``weak`` in the constructor instead.
242243
243- return_df : bool , optional
244+ return_df : boolean , optional
244245 Deprecated. Output type now follows scikit-learn's standard
245246 ``set_output``/``set_config`` mechanism.
246247 """
@@ -253,6 +254,9 @@ def transform(self, X, weak=None, return_df=None):
253254 stacklevel = 2 ,
254255 )
255256 self .weak = weak
257+ requested_transform = None
258+ prev_output_config = None
259+ force_numpy = return_df is False
256260 if return_df is not None :
257261 warnings .warn (
258262 "`return_df` is deprecated and will be removed in a future "
@@ -261,11 +265,20 @@ def transform(self, X, weak=None, return_df=None):
261265 FutureWarning ,
262266 stacklevel = 2 ,
263267 )
268+ prev_output_config = _get_output_config ("transform" , estimator = self )["dense" ]
269+ requested_transform = "pandas" if return_df else "default"
270+ if prev_output_config != requested_transform :
271+ self .set_output (transform = requested_transform )
264272 try :
265- return super ().transform (X )
273+ result = super ().transform (X )
266274 finally :
267275 if weak is not None :
268276 self .weak = prev_weak
277+ if requested_transform is not None and prev_output_config != requested_transform :
278+ self .set_output (transform = prev_output_config )
279+ if force_numpy and hasattr (result , "to_numpy" ):
280+ result = result .to_numpy ()
281+ return result
269282
270283 def fit_transform (self , X , y = None , ** fit_params ):
271284 """
0 commit comments