2016-06-27 33 views

Odpowiedz

46

ręcznie, można użyć pd.DataFrame konstruktora, dając numpy array (data) oraz listę nazw kolumn (columns). Aby mieć wszystko w jednym DataFrame można łączyć funkcje i cel w jednym numpy tablicy z np.c_[...] (uwaga []):

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

Czy możesz dodać trochę tekstu, aby objaśnić ten kod? Jest to nieco zwięzłe według naszych standardów. – gung

+1

Niektóre paczki mają nazwę feature_names jako ndarray, która będzie łamać parametr columns. –

+0

Brakujący klucz "Gatunek" i wartości dla ramki danych. – mastash3ff

0

Nie może być lepszy sposób, ale tutaj jest to, co mam zrobić w przeszłość i działa całkiem dobrze:

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 

teraz mydata będzie miał wszystko, czego potrzeba - Atrybuty kierować zmienną i columnnames

+1

Rozwiązanie TomDLT jest znacznie lepsze niż to, co sugeruję powyżej. Robi to samo, ale jest bardzo elegancki i łatwy do zrozumienia. Użyć tego! – Shanbhag

+0

'mydata = pd.DataFrame (items [1] [1])' throws 'TypeError: 'dict_items' obiekt nie obsługuje indeksowania' –

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

Ten poradnik może zainteresowań: http://www.neural.cz/dataset-exploration-boston-house-pricing.html

+3

Konieczne jest połączenie danych z celem: df = pd.DataFrame (np.concatenate ((iris.data, np.array ([iris.target]) .T), axis = 1), columns = iris.feature_names + ['target']) –

1

Praca off najlepszą odpowiedź i zajęcie mój komentarz, tutaj jest funkcja konwersji

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

Działa to dla mnie.

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

Rozwiązanie TOMDLt nie jest wystarczająco ogólne dla wszystkich zestawów danych w nauce scikit. Na przykład nie działa w przypadku zbioru danych mieszkaniowych bostońskich. Proponuję inne rozwiązanie, które jest bardziej uniwersalne. Nie musisz też używać 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

tylko jako alternatywa, że ​​mogę owinąć głowę wokół dużo łatwiejsze:

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

Zasadniczo zamiast złączenie od uzyskania go, po prostu zrobić ramkę danych z matrycy funkcji i po prostu dodać kolumnę docelowej z danymi [ „whatvername”] i chwycić docelowych wartości z zestawu danych

0

Zajęło mi 2 godziny do tego dojść

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) 

Wracaj po gatunek dla mojej pandy