web-dev-qa-db-fra.com

Chargement du jeu de données sur le cancer SKLearn dans Pandas DataFrame

J'essaie de charger un fichier sklearn.dataset et il me manque une colonne, en fonction des clés (noms_cible, cible et DESCR). J'ai essayé diverses méthodes pour inclure la dernière colonne, mais avec des erreurs. 

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

 cancer = load_breast_cancer()
 print cancer.keys()

les clés sont ['target_names', 'data', 'target', 'DESCR', 'feature_names']

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

avec le code ci-dessus, il ne retourne que 30 colonnes, alors que j’ai besoin de 31 colonnes. Quelle est la meilleure façon de charger des jeux de données scikit-learn dans pandas DataFrame.

8
pythonhunter

Une autre option, mais unique, pour créer le cadre de données, y compris les entités et les variables cibles, est la suivante:

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']))
6
Jamie Edgecombe

Si vous voulez avoir une colonne target, vous devrez l'ajouter car elle n'est pas dans cancer.data. cancer.target a la colonne avec 0 ou 1, et cancer.target_names a l'étiquette. J'espère que ce qui suit est ce que vous voulez:

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.
2
Y. Luo

Cela fonctionne aussi, en utilisant également 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
2
pythonhunter

les noms de cibles de mappage peuvent être gérés avec élégance en utilisant map () :

data["target"] = pd.Categorical(pd.Series(cancer.target).map(lambda x: cancer.target_names[x]))
0
Peter Ertl