Saltar al contenido

Cómo usar sklearn fit_transform con pandas y devolver un marco de datos en lugar de numpy array?

Te damos la contestación a este disgusto, o por lo menos eso creemos. Si presentas inquietudes compártelo en un comentario y sin dudarlo te ayudaremos

Solución:

Podrías convertir el DataFrame como un numpy array utilizando as_matrix(). Ejemplo en un conjunto de datos aleatorio:

Editar:
Cambiando as_matrix() para values(no cambia el resultado) según la última oración del as_matrix() documentos anteriores:

Generalmente, se recomienda usar ‘.valores’.

import pandas as pd
import numpy as np #for the random integer example
df = pd.DataFrame(np.random.randint(0.0,100.0,size=(10,4)),
              index=range(10,20),
              columns=['col1','col2','col3','col4'],
              dtype='float64')

Tenga en cuenta que los índices son 10-19:

In [14]: df.head(3)
Out[14]:
    col1    col2    col3    col4
    10  3   38  86  65
    11  98  3   66  68
    12  88  46  35  68

Ahora fit_transform el DataFrame para obtener el scaled_featuresarray:

from sklearn.preprocessing import StandardScaler
scaled_features = StandardScaler().fit_transform(df.values)

In [15]: scaled_features[:3,:] #lost the indices
Out[15]:
array([[-1.89007341,  0.05636005,  1.74514417,  0.46669562],
       [ 1.26558518, -1.35264122,  0.82178747,  0.59282958],
       [ 0.93341059,  0.37841748, -0.60941542,  0.59282958]])

Asigne los datos escalados a un DataFrame (Nota: use el index y columns argumentos de palabras clave para mantener sus índices originales y nombres de columnas:

scaled_features_df = pd.DataFrame(scaled_features, index=df.index, columns=df.columns)

In [17]:  scaled_features_df.head(3)
Out[17]:
    col1    col2    col3    col4
10  -1.890073   0.056360    1.745144    0.466696
11  1.265585    -1.352641   0.821787    0.592830
12  0.933411    0.378417    -0.609415   0.592830

Edición 2:

Encontré el paquete sklearn-pandas. Se enfoca en hacer que scikit-learn sea más fácil de usar con pandas. sklearn-pandas es especialmente útil cuando necesita aplicar más de un tipo de transformación a los subconjuntos de columnas del DataFrame, un escenario más común. Está documentado, pero así es como lograría la transformación que acabamos de realizar.

from sklearn_pandas import DataFrameMapper

mapper = DataFrameMapper([(df.columns, StandardScaler())])
scaled_features = mapper.fit_transform(df.copy(), 4)
scaled_features_df = pd.DataFrame(scaled_features, index=df.index, columns=df.columns)

import pandas as pd    
from sklearn.preprocessing import StandardScaler

df = pd.read_csv('your file here')
ss = StandardScaler()
df_scaled = pd.DataFrame(ss.fit_transform(df),columns = df.columns)

El df_scaled será el marco de datos ‘mismo’, solo que ahora con los valores escalados

features = ["col1", "col2", "col3", "col4"]
autoscaler = StandardScaler()
df[features] = autoscaler.fit_transform(df[features])

Comentarios y valoraciones del tutorial

Nos puedes añadir valor a nuestra información colaborando tu experiencia en las crónicas.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *