tutorial sklearn scikit science predicciones metodos machine learning learn fit example español data con clasificacion aprende dataset scikit-learn pandas

dataset - sklearn - ¿Cómo convertir un conjunto de datos Scikit-learn en un conjunto de datos Pandas?



sklearn fit (13)

¿Cómo convierto datos de un objeto Scikit-learn Bunch a un Pandas DataFrame?

from sklearn.datasets import load_iris import pandas as pd data = load_iris() print(type(data)) data1 = pd. # Is there a Pandas method to accomplish this?


Cualquier cosa que TomDLT haya respondido puede no funcionar para algunos de ustedes porque

data1 = pd.DataFrame(data= np.c_[iris[''data''], iris[''target'']], columns= iris[''feature_names''] + [''target''])

porque iris [''feature_names''] te devuelve una matriz numpy. En una matriz numpy no puede agregar una matriz y una lista [''target''] con solo + operador. Por lo tanto, primero debe convertirlo en una lista y luego agregarlo.

Tu puedes hacer

data1 = pd.DataFrame(data= np.c_[iris[''data''], iris[''target'']], columns= list(iris[''feature_names'']) + [''target''])

Esto funcionará bien aunque ...


Este fragmento es solo azúcar sintáctico construido sobre lo que TomDLT y rolyat ya han contribuido y explicado. Las únicas diferencias serían que load_iris devolverá una tupla en lugar de un diccionario y se enumerarán los nombres de las columnas.

df = pd.DataFrame(np.c_[load_iris(return_X_y=True)])


Esto funciona para mi.

dataFrame = pd.dataFrame(data = np.c_[ [iris[''data''],iris[''target''] ], columns=iris[''feature_names''].tolist() + [''target''])


La solución de TOMDLt no es lo suficientemente genérica para todos los conjuntos de datos en scikit-learn. Por ejemplo, no funciona para el conjunto de datos de vivienda de Boston. Propongo una solución diferente que es más universal. No es necesario usar numpy también.

from sklearn import datasets import pandas as pd boston_data = datasets.load_boston() df_boston = pd.DataFrame(boston_data.data,columns=boston_data.feature_names) df_boston[''target''] = pd.Series(boston_data.target) df_boston.head()

Como una función general:

def sklearn_to_df(sklearn_dataset): df = pd.DataFrame(sklearn_dataset.data, columns=sklearn_dataset.feature_names) df[''target''] = pd.Series(sklearn_dataset.target) return df df_boston = sklearn_to_df(datasets.load_boston())


Manualmente, puede usar el constructor pd.DataFrame , que proporciona una matriz numpy ( data ) y una lista de los nombres de las columnas ( columns ). Para tener todo en un DataFrame, puede concatenar las características y el objetivo en una matriz np.c_[...] con np.c_[...] (tenga en cuenta [] ):

import numpy as np import pandas as pd from sklearn.datasets import load_iris # save load_iris() sklearn dataset to iris # if you''d like to check dataset type use: type(load_iris()) # if you''d like to view list of attributes use: dir(load_iris()) iris = load_iris() # np.c_ is the numpy concatenate function # which is used to concat iris[''data''] and iris[''target''] arrays # for pandas column argument: concat iris[''feature_names''] list # and string list (in this case one string); you can make this anything you''d like.. # the original dataset would probably call this [''Species''] data1 = pd.DataFrame(data= np.c_[iris[''data''], iris[''target'']], columns= iris[''feature_names''] + [''target''])


Me tomó 2 horas resolver esto

import numpy as np import pandas as pd from sklearn.datasets import load_iris iris = load_iris() ##iris.keys() df= pd.DataFrame(data= np.c_[iris[''data''], iris[''target'']], columns= iris[''feature_names''] + [''target'']) df[''species''] = pd.Categorical.from_codes(iris.target, iris.target_names)

Vuelve la especie para mis pandas


Obteniendo la mejor respuesta y abordando mi comentario, aquí hay una función para la conversión

def bunch_to_dataframe(bunch): fnames = bunch.feature_names features = fnames.tolist() if isinstance(fnames, np.ndarray) else fnames features += [''target''] return pd.DataFrame(data= np.c_[bunch[''data''], bunch[''target'']], columns=features)


Otra forma de combinar características y variables de destino puede ser usar np.column_stack ( details )

import numpy as np import pandas as pd from sklearn.datasets import load_iris data = load_iris() df = pd.DataFrame(np.column_stack((data.data, data.target)), columns = data.feature_names+[''target'']) print(df.head())

Resultado:

sepal length (cm) sepal width (cm) petal length (cm) petal width (cm) target 0 5.1 3.5 1.4 0.2 0.0 1 4.9 3.0 1.4 0.2 0.0 2 4.7 3.2 1.3 0.2 0.0 3 4.6 3.1 1.5 0.2 0.0 4 5.0 3.6 1.4 0.2 0.0

Si necesita la etiqueta de cadena para el target , puede usar replace convirtiendo target_names en dictionary y agregar una nueva columna:

df[''label''] = df.target.replace(dict(enumerate(data.target_names))) print(df.head())

Resultado:

sepal length (cm) sepal width (cm) petal length (cm) petal width (cm) target label 0 5.1 3.5 1.4 0.2 0.0 setosa 1 4.9 3.0 1.4 0.2 0.0 setosa 2 4.7 3.2 1.3 0.2 0.0 setosa 3 4.6 3.1 1.5 0.2 0.0 setosa 4 5.0 3.6 1.4 0.2 0.0 setosa


Puede haber una mejor manera, pero esto es lo que he hecho en el pasado y funciona bastante bien:

items = data.items() #Gets all the data from this Bunch - a huge list mydata = pd.DataFrame(items[1][1]) #Gets the Attributes mydata[len(mydata.columns)] = items[2][1] #Adds a column for the Target Variable mydata.columns = items[-1][1] + [items[2][0]] #Gets the column names and updates the dataframe

Ahora mydata tendrá todo lo que necesita: atributos, variables de destino y nombres de columna.


Solo como una alternativa que podría entender mucho más fácilmente:

data = load_iris() df = pd.DataFrame(data[''data''], columns=data[''feature_names'']) df[''target''] = data[''target''] df.head()

Básicamente, en lugar de concatenar desde el principio, solo haga un marco de datos con la matriz de características y luego simplemente agregue la columna de destino con datos [''whatvername''] y tome los valores de destino del conjunto de datos


Una de las mejores formas:

data = pd.DataFrame(digits.data)

Dígitos es el marco de datos de sklearn y lo convertí en un marco de datos de pandas



import pandas as pd from sklearn.datasets import load_iris iris = load_iris() X = iris[''data''] y = iris[''target''] iris_df = pd.DataFrame(X, columns = iris[''feature_names'']) iris_df.head()