150 votes

Comment convertir un jeu de données Scikit-learn en jeu de données Pandas ?

Comment convertir les données d'un objet Scikit-learn Bunch en un DataFrame Pandas ?

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?

185voto

TomDLT Points 1614

Manuellement, vous pouvez utiliser pd.DataFrame en donnant un tableau numpy ( data ) et une liste des noms des colonnes ( columns ). Pour avoir tout dans un seul DataFrame, vous pouvez concaténer les caractéristiques et la cible dans un tableau numpy avec np.c_[...] (notez le [] ):

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 votes

Pouvez-vous ajouter un petit texte pour expliquer ce code ? C'est un peu court selon nos normes.

2 votes

Certaines grappes ont les noms des caractéristiques sous la forme d'un tableau ndarray, ce qui casse le paramètre columns.

1 votes

Clé et valeurs "Species" manquantes pour le cadre de données.

110voto

justin4480 Points 279
from sklearn.datasets import load_iris
import pandas as pd

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

Ce tutoriel peut vous intéresser : http://www.neural.cz/dataset-exploration-boston-house-pricing.html

17 votes

Il faut concaténer les données avec la cible : df = pd.DataFrame(np.concatenate((iris.data, np.array([iris.target])).T), axis=1), columns=iris.feature_names + ['target'])

83voto

Nilav Baran Ghosh Points 439

La solution de TOMDLt n'est pas assez générique pour tous les jeux de données de scikit-learn. Par exemple, elle ne fonctionne pas pour le jeu de données des logements de Boston. Je propose une solution différente qui est plus universelle. Il n'est pas nécessaire d'utiliser numpy en plus.

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

En tant que fonction générale :

def sklearn_to_df(sklearn_dataset):
    df = pd.DataFrame(sklearn_dataset.data, columns=sklearn_dataset.feature_names)
    df['target'] = pd.Series(sklearn_dataset.target)
    return df

df_boston = sklearn_to_df(datasets.load_boston())

1 votes

Je pense pd.Series(sklearn_dataset.target) peut être remplacé par sklearn_dataset.target ? En tout cas, cela fonctionne pour moi sur pandas 1.1.3.

2 votes

Je trouve cette solution plus facile à comprendre

14voto

daguito81 Points 71

C'était juste une alternative que je pouvais comprendre beaucoup plus facilement :

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

En fait, au lieu de concaténer dès le départ, il suffit de créer un cadre de données avec la matrice des caractéristiques, puis d'ajouter la colonne cible avec data['whatvername'] et de récupérer les valeurs cibles de l'ensemble de données.

0 votes

Les réponses simples sont les meilleures...

6voto

Mukul Aggarwal Points 684

Cela fonctionne pour moi.

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X