Make RFE/RFECV preserve pandas dataframes

### Describe the workflow you want to enable

Hi!

I am currently using xgboost with some categorical features. To get that to work the categorical features have to be marked as such in the pandas dataframe:
```python
df["my_cats"] = df["my_cats"].astype("string").astype("category")
```

The RFE(CV) implementation converts any input to a numpy array that can only contain numeric values which blocks me from using them with xgboost because the dtype information get's lost along the way.

So my proposal: make RFE and RFECV preserve pandas dataframes so the estimator that is used still has access to this information.


### Describe your proposed solution

I was able to get this to work with the following quick-and-dirty changes:
```python
# relax the data validation a little bit (dtype -> None, cast_to_ndarray -> False)
X, y = self._validate_data(
    X,
    y,
    accept_sparse="csc",
    ensure_min_features=2,
    force_all_finite=False,
    multi_output=True,
    dtype=None,
    cast_to_ndarray=False,
)

# make the fit command pandas compliant
estimator.fit(X.iloc[:, features], y, **fit_params)

# instead of
estimator.fit(X[:, features], y, **fit_params)
```
The second step is a hack of course and would have to be replaced depending on the input of X.

With these changes and a `set_output(transform='pandas')` i got the optimization to work.

### Describe alternatives you've considered, if relevant

_No response_

### Additional context

https://github.com/scikit-learn/scikit-learn/issues/17338 - similar problem with catboost.

COMMENT:
One final thought: This issue is only relevant to `RFE` and `RFECV`. [`sklearn.feature_selection`](https://scikit-learn.org/stable/api/sklearn.feature_selection.html#module-sklearn.feature_selection) is a set of feature selection approaches - i.e. essentially their job is to **transform** the input data by selecting some features, not to **predict**. Indeed, the vast majority do not implement a `.predict` method at all, only a `.transform` method; only `RFE` and `RFECV` do. Thus, issues with the fitted estimator used for prediction are only relevant to `RFE` and `RFECV`.  

(As I understand it, the reason only `RFE` and `RFECV` implement `.predict` is as follows:
- In cases like [`VarianceThreshold`](https://scikit-learn.org/stable/modules/generated/sklearn.feature_selection.VarianceThreshold.html#sklearn.feature_selection.VarianceThreshold) it is obvious - there is no model fitted which can predict. 
- With [`SequentialFeatureSelector`](https://scikit-learn.org/stable/modules/generated/sklearn.feature_selection.SequentialFeatureSelector.html#sklearn.feature_selection.SequentialFeatureSelector), since it uses k-fold cross-validation there will be $k$ models fitted using the required $m$ features, so there is no obvious choice about which of the $k$ models to use for prediction. (Shame the models aren't kept in some attribute though).  
- It is only `RFE` and `RFECV` which fit one and only one model, and as such it is only this feature selection method which should arguably incorporate the fitted model and use that for predictions, rather than requiring a new model to be fitted on transformed data. While this means a slight inconsistency across the `sklearn.feature_selection` module, it would probably be overly pedantic to insist that only pure feature selection be performed here.)

Labels: New Feature