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
from sklearn.datasets import load_iris
import pandas as pd
data = load_iris()
df = pd.DataFrame(data.data, columns=data.feature_names)
df.head()
Este tutorial puede ser de interés: http://www.neural.cz/dataset-exploration-boston-house-pricing.html
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()