2016-06-27 30 views

risposta

46

manualmente, è possibile utilizzare pd.DataFrame costruttore, dando una matrice NumPy (data) e un elenco dei nomi delle colonne (columns). avere tutto in un unico dataframe, è possibile concatenare le caratteristiche e il target in un unico array NumPy con np.c_[...] (notare il []):

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']) 
+3

Puoi aggiungere un piccolo testo per spiegare questo codice? Questo è un po 'breve per i nostri standard. – gung

+1

Alcuni mazzi hanno i nomi funzione come narray che interromperà il parametro colonne. –

+0

Manca la chiave "Specie" e i valori per il dataframe. – mastash3ff

0

Ci potrebbe essere un modo migliore, ma qui è quello che ho fatto nella passato e funziona abbastanza bene:

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 

Ora mydata avrà tutto il necessario - gli attributi, variabile target e columnnames

+1

La soluzione di TomDLT è molto superiore a quella che sto suggerendo sopra. Fa la stessa cosa ma è molto elegante e facile da capire. Usa quello! – Shanbhag

+0

'mydata = pd.DataFrame (elementi [1] [1])' genera 'TypeError: 'oggetto dict_items' non supporta l'indicizzazione' –

17
from sklearn.datasets import load_iris 
import pandas as pd 

data = load_iris() 
df = pd.DataFrame(data.data, columns=data.feature_names) 
df.head() 

Questo tutorial forse interessare: http://www.neural.cz/dataset-exploration-boston-house-pricing.html

+3

È necessario concatenare i dati con target: df = pd.DataFrame (np.concatenate ((iris.data, np.array ([iris.target]). T), axis = 1), columns = iris.feature_names + ['target']) –

1

Lavorare fuori la risposta migliore e affrontare il mio commento, qui è una funzione per la conversione

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) 
2

Questo funziona per me.

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

La soluzione di TOMDLt non è abbastanza generica per tutti i set di dati in scikit-learn. Ad esempio, non funziona per il dataset di Boston. Propongo una soluzione diversa che è più universale. Non c'è bisogno di usare anche numpy.

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() 
5

Proprio come un'alternativa che ho potuto avvolgere la mia testa intorno molto più semplice:

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

In sostanza, invece di concatenare da ottenere andare, basta fare un frame di dati con la matrice di caratteristiche e poi basta aggiungere la colonna di destinazione con i dati [ 'whatvername'] e afferrare i valori di riferimento dal set di dati

0

mi ci sono volute 2 ore per capire questo

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) 

Torna le specie per i miei panda