2017-06-03 42 views
6

Próbuję załadować sklearn.dataset i brakuje kolumny, zgodnie z kluczami (target_names, target & DESCR). Próbowałem różnych metod, aby uwzględnić ostatnią kolumnę, ale z błędami.Ładowanie zestawu danych raka SKLearn w Pandas DataFrame

import numpy as np 
import pandas as pd 
from sklearn.datasets import load_breast_cancer 

cancer = load_breast_cancer() 
print cancer.keys() 

są klucze [ 'target_names', 'dane', "docelowej 'DESCR', 'feature_names']

data = pd.DataFrame(cancer.data, columns=[cancer.feature_names]) 
print data.describe() 

kodem powyżej, funkcja zwraca 30 kolumn, kiedy potrzebuję 31 kolumn. Jaki jest najlepszy sposób, aby załadować scikit-zestaw danych w pandas DataFrame.

+0

Czy możesz wyjaśnić, dlaczego nie powinno być 31 kolumn? Jeśli użyjesz 'cancer.data.shape' lub sprawdzisz [opis dataset] (http://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_breast_cancer.html), wydaje się, że jest tylko 30 kolumny w zestawie danych. Którą kolumnę przegapiłeś? –

+1

Brakuje kolumny target/target_names z dataset.keys(), ponieważ nie została jeszcze załadowana do ramki danych. – pythonhunter

Odpowiedz

2

Jeśli chcesz mieć kolumnę target, musisz ją dodać, ponieważ nie ma jej w wersji cancer.data. cancer.target ma kolumnę z 0 lub 1, a cancer.target_names ma etykietę. Mam nadzieję, że następujące jest to, czego chcesz:

import numpy as np 
import pandas as pd 
from sklearn.datasets import load_breast_cancer 

cancer = load_breast_cancer() 
print cancer.keys() 

data = pd.DataFrame(cancer.data, columns=[cancer.feature_names]) 
print data.describe() 

data = data.assign(target=pd.Series(cancer.target)) 
print data.describe() 

# In case you want labels instead of numbers. 
data.replace(to_replace={'target': {0: cancer.target_names[0]}}, inplace=True) 
data.replace(to_replace={'target': {1: cancer.target_names[1]}}, inplace=True) 
print data.shape # data.describe() won't show the "target" column here because I converted its value to string. 
+0

Tak, właśnie się zorientowałem, dane ["Target"] = pd.Series (dane = cancer.target, index = data.index) też działa. Dzięki. – pythonhunter

1

To również działa, również przy użyciu pd.Series.

import numpy as np 
import pandas as pd 
from sklearn.datasets import load_breast_cancer 

cancer = load_breast_cancer() 
print cancer.keys() 

data = pd.DataFrame(cancer.data, columns=[cancer.feature_names]) 
data['Target'] = pd.Series(data=cancer.target, index=data.index) 

print data.keys() 
print data.shape 
3

Inną opcją, ale jedno-liner, aby utworzyć dataframe tym funkcji i zmiennych docelowych jest:

import pandas as pd 
import numpy as np 
from sklearn.datasets import load_breast_cancer 

cancer = load_breast_cancer() 
df = pd.DataFrame(np.c_[cancer['data'], cancer['target']], 
        columns= np.append(cancer['feature_names'], ['target']))