votingclassifier sklearn forest python numpy pandas scikit-learn

python - sklearn - Cómo conservar los encabezados de columna del marco de datos después del preprocesamiento en scikit-learn



sklearn adaboost (2)

De acuerdo con la respuesta de Ami Tavory here , según la documentación, Imputer omite las columnas o filas vacías (sin embargo, usted lo ejecuta).
Por lo tanto, antes de ejecutar Imputer y configurar los nombres de columna como se describe above , ejecute algo como esto (para columnas):

X_train=X_train.dropna(axis=1, how=''all'')

df.dropna se describe aquí.

Tengo un marco de datos pandas que tiene algunas filas y columnas. Cada columna tiene un encabezado. Ahora, mientras continúe realizando operaciones de manipulación de datos en pandas, mis encabezados variables se conservan. Pero si pruebo alguna función de preprocesamiento de datos de Sci-kit-learn lib, termino perdiendo todos mis encabezados y el marco se convierte en solo una matriz de números.

Entiendo por qué sucede porque scikit-learn proporciona una ndarray numpy como salida. Y la ndarray numpy siendo solo una matriz no tendría nombres de columna.

Pero aquí está la cosa. Si estoy creando algún modelo en mi conjunto de datos, incluso después del preprocesamiento de datos inicial y de probar un modelo, es posible que tenga que realizar más tareas de manipulación de datos para ejecutar otro modelo para un mejor ajuste. Sin poder acceder al encabezado de columna hace que sea difícil realizar la manipulación de datos, ya que es posible que no sepa cuál es el índice de una variable en particular, pero es más fácil recordar el nombre de la variable o incluso buscar haciendo df.columns.

¿Cómo superar eso?

EDIT1: Edición con instantáneas de datos de muestra.

Pclass Sex Age SibSp Parch Fare Embarked 0 3 0 22 1 0 7.2500 1 1 1 1 38 1 0 71.2833 2 2 3 1 26 0 0 7.9250 1 3 1 1 35 1 0 53.1000 1 4 3 0 35 0 0 8.0500 1 5 3 0 NaN 0 0 8.4583 3 6 1 0 54 0 0 51.8625 1 7 3 0 2 3 1 21.0750 1 8 3 1 27 0 2 11.1333 1 9 2 1 14 1 0 30.0708 2 10 3 1 4 1 1 16.7000 1 11 1 1 58 0 0 26.5500 1 12 3 0 20 0 0 8.0500 1 13 3 0 39 1 5 31.2750 1 14 3 1 14 0 0 7.8542 1 15 2 1 55 0 0 16.0000 1

Lo anterior es básicamente el marco de datos de los pandas. Ahora, cuando haga esto en este marco de datos, eliminará los encabezados de las columnas.

from sklearn import preprocessing X_imputed=preprocessing.Imputer().fit_transform(X_train) X_imputed

Los datos nuevos son de matriz numpy y, por lo tanto, los nombres de columna se eliminan.

array([[ 3. , 0. , 22. , ..., 0. , 7.25 , 1. ], [ 1. , 1. , 38. , ..., 0. , 71.2833 , 2. ], [ 3. , 1. , 26. , ..., 0. , 7.925 , 1. ], ..., [ 3. , 1. , 29.69911765, ..., 2. , 23.45 , 1. ], [ 1. , 0. , 26. , ..., 0. , 30. , 2. ], [ 3. , 0. , 32. , ..., 0. , 7.75 , 3. ]])

Así que quiero conservar los nombres de las columnas cuando haga algo de manipulación de datos en el marco de datos de mis pandas.


En la mayoría de los casos, scikit-learn elimina los encabezados de las columnas, así que simplemente agrégalos nuevamente después. En su ejemplo, con X_imputed como sklearn.preprocessing output y X_train como el marco de datos original, puede volver a colocar los encabezados de columna con:

X_imputed_df = pd.DataFrame(X_imputed, columns = X_train.columns)