¿Cómo convierto datos de un objeto Bunch de Scikit-learn 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?
dataset
scikit-learn
pandas
Muestras de SANBI
fuente
fuente
load_boston()
. Esta respuesta funciona de manera más general: stackoverflow.com/a/46379878/1840471Este tutorial puede ser de interés: http://www.neural.cz/dataset-exploration-boston-house-pricing.html
fuente
La solución de TOMDLt no es lo suficientemente genérica para todos los conjuntos de datos de scikit-learn. Por ejemplo, no funciona para el conjunto de datos de vivienda de Boston. Propongo una solución diferente, más universal. No es necesario usar numpy también.
Como función general:
fuente
Solo como una alternativa que podría entender mucho más fácilmente:
Básicamente, en lugar de concatenar desde el principio, simplemente cree un marco de datos con la matriz de características y luego agregue la columna de destino con datos ['whatvername'] y obtenga los valores de destino del conjunto de datos
fuente
Me tomó 2 horas resolver esto
Recupera la especie de mis pandas
fuente
De lo contrario, use conjuntos de datos de seaborn que son marcos de datos reales de pandas:
Compare con los conjuntos de datos de scikit learn:
fuente
Esto funciona para mi.
fuente
Otra forma de combinar características y variables de destino puede ser usando
np.column_stack
( detalles )Resultado:
Si necesita la etiqueta de cadena para el
target
, entonces se puede utilizarreplace
mediante la conversióntarget_names
adictionary
y añadir una nueva columna:Resultado:
fuente
Básicamente, lo que necesita son los "datos", y los tiene en el grupo de scikit, ahora solo necesita el "objetivo" (predicción) que también está en el grupo.
Así que solo necesito combinar estos dos para completar los datos
fuente
A partir de la versión 0.23, puede devolver directamente un DataFrame usando el
as_frame
argumento. Por ejemplo, cargando el conjunto de datos de iris:Según tengo entendido, al utilizar las notas de la versión provisional , esto funciona para los conjuntos de datos de cáncer de mama, diabetes, dígitos, iris, linnerud, vino y california_houses.
fuente
Actualización: 2020
Puede usar el parámetro
as_frame=True
para obtener marcos de datos de pandas.Si el parámetro as_frame está disponible (por ejemplo, load_iris)
Si el parámetro as_frame NO está disponible (por ejemplo, load_boston)
fuente
Trabajando con la mejor respuesta y abordando mi comentario, aquí hay una función para la conversión
fuente
Cualquiera que sea la respuesta de TomDLT, puede que no funcione para algunos de ustedes porque
porque iris ['feature_names'] te devuelve una matriz numerosa. En la matriz numpy no puede agregar una matriz y una lista ['objetivo'] con solo + operador. Por lo tanto, primero debe convertirlo en una lista y luego agregarlo.
Tu puedes hacer
Esto funcionará bien aunque ...
fuente
Puede que haya una forma mejor, pero esto es lo que hice en el pasado y funciona bastante bien:
Ahora mydata tendrá todo lo que necesita: atributos, variables de destino y nombres de columnas
fuente
mydata = pd.DataFrame(items[1][1])
lanzamientosTypeError: 'dict_items' object does not support indexing
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án una tupla en lugar de un diccionario y los nombres de las columnas se enumerarán.fuente
fuente
Una de las mejores formas:
Digits es el dataframe sklearn y lo convertí en un DataFrame de pandas
fuente
Tomé un par de ideas de sus respuestas y no sé cómo hacerlo más corto :)
Esto le da un Pandas DataFrame con feature_names más target como columnas y RangeIndex (start = 0, stop = len (df), step = 1). Me gustaría tener un código más corto donde pueda agregar 'objetivo' directamente.
fuente
La API es un poco más limpia que las respuestas sugeridas. Aquí, use
as_frame
y asegúrese de incluir una columna de respuesta también.fuente
Aquí hay otro ejemplo de método integrado que puede resultar útil.
Los datos iris_X se importan como pandas DataFrame y el objetivo iris_y se importan como pandas Series.
fuente
fuente