|
3 | 3 | to work with heterogeneous data and to apply different transformers to |
4 | 4 | different columns. |
5 | 5 | """ |
| 6 | + |
6 | 7 | # Author: Andreas Mueller |
7 | 8 | # Joris Van den Bossche |
8 | 9 | # License: BSD |
|
16 | 17 | from ..base import TransformerMixin, _fit_context, clone |
17 | 18 | from ..pipeline import _fit_transform_one, _name_estimators, _transform_one |
18 | 19 | from ..preprocessing import FunctionTransformer |
19 | | -from ..utils import Bunch, _get_column_indices, _safe_indexing, check_pandas_support |
| 20 | +from ..utils import Bunch, _get_column_indices, _safe_indexing |
20 | 21 | from ..utils._estimator_html_repr import _VisualBlock |
21 | 22 | from ..utils._metadata_requests import METHODS |
22 | 23 | from ..utils._param_validation import HasMethods, Hidden, Interval, StrOptions |
23 | | -from ..utils._set_output import _get_output_config, _safe_set_output |
| 24 | +from ..utils._set_output import ( |
| 25 | + _get_container_adapter, |
| 26 | + _get_output_config, |
| 27 | + _safe_set_output, |
| 28 | +) |
24 | 29 | from ..utils.metadata_routing import ( |
25 | 30 | MetadataRouter, |
26 | 31 | MethodMapping, |
@@ -310,8 +315,12 @@ def set_output(self, *, transform=None): |
310 | 315 |
|
311 | 316 | - `"default"`: Default output format of a transformer |
312 | 317 | - `"pandas"`: DataFrame output |
| 318 | + - `"polars"`: Polars output |
313 | 319 | - `None`: Transform configuration is unchanged |
314 | 320 |
|
| 321 | + .. versionadded:: 1.4 |
| 322 | + `"polars"` option was added. |
| 323 | +
|
315 | 324 | Returns |
316 | 325 | ------- |
317 | 326 | self : estimator instance |
@@ -1006,10 +1015,9 @@ def _hstack(self, Xs): |
1006 | 1015 | return sparse.hstack(converted_Xs).tocsr() |
1007 | 1016 | else: |
1008 | 1017 | Xs = [f.toarray() if sparse.issparse(f) else f for f in Xs] |
1009 | | - config = _get_output_config("transform", self) |
1010 | | - if config["dense"] == "pandas" and all(hasattr(X, "iloc") for X in Xs): |
1011 | | - pd = check_pandas_support("transform") |
1012 | | - output = pd.concat(Xs, axis=1) |
| 1018 | + adapter = _get_container_adapter("transform", self) |
| 1019 | + if adapter and all(adapter.is_supported_container(X) for X in Xs): |
| 1020 | + output = adapter.hstack(Xs) |
1013 | 1021 |
|
1014 | 1022 | output_samples = output.shape[0] |
1015 | 1023 | if any(_num_samples(X) != output_samples for X in Xs): |
@@ -1042,8 +1050,7 @@ def _hstack(self, Xs): |
1042 | 1050 | names_out = self._add_prefix_for_feature_names_out( |
1043 | 1051 | list(zip(transformer_names, feature_names_outs)) |
1044 | 1052 | ) |
1045 | | - output.columns = names_out |
1046 | | - return output |
| 1053 | + return adapter.rename_columns(output, names_out) |
1047 | 1054 |
|
1048 | 1055 | return np.hstack(Xs) |
1049 | 1056 |
|
|
0 commit comments