Como faço para converter dados de um objeto Scikit-learn Bunch em um Pandas DataFrame?
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?
dataset
scikit-learn
pandas
Amostras SANBI
fonte
fonte
load_boston()
. Esta resposta funciona de maneira mais geral: stackoverflow.com/a/46379878/1840471Este tutorial pode ser de seu interesse: http://www.neural.cz/dataset-exploration-boston-house-pricing.html
fonte
A solução do TOMDLt não é genérica o suficiente para todos os conjuntos de dados no scikit-learn. Por exemplo, não funciona para o conjunto de dados de habitação de Boston. Proponho uma solução diferente que é mais universal. Não há necessidade de usar numpy também.
Como função geral:
fonte
Apenas como uma alternativa em que eu poderia entender muito mais facilmente:
Basicamente, em vez de concatenar desde o início, basta fazer um quadro de dados com a matriz de recursos e, em seguida, apenas adicionar a coluna de destino com os dados ['whatvername'] e pegar os valores de destino do conjunto de dados
fonte
Levei 2 horas para descobrir isso
Recupere as espécies para meus pandas
fonte
Caso contrário, use conjuntos de dados marítimos que são frames de dados reais do pandas:
Compare com os conjuntos de dados do scikit learn:
fonte
Isso funciona para mim.
fonte
Outra maneira de combinar recursos e variáveis de destino pode ser usando
np.column_stack
( detalhes )Resultado:
Se você precisa a etiqueta de string para o
target
, então você pode usarreplace
através da conversãotarget_names
paradictionary
e adicionar uma nova coluna:Resultado:
fonte
Basicamente, o que você precisa são os "dados", e você os tem no grupo do scikit, agora você precisa apenas do "alvo" (previsão) que também está no grupo.
Então, só precisa concatá-los para tornar os dados completos
fonte
A partir da versão 0.23, você pode retornar um DataFrame diretamente usando o
as_frame
argumento. Por exemplo, carregando o conjunto de dados da íris:No meu entendimento, usando as notas de versão provisórias , isso funciona para os conjuntos de dados breast_cancer, diabetes, digits, iris, linnerud, wine e california_houses.
fonte
Atualização: 2020
Você pode usar o parâmetro
as_frame=True
para obter dataframes do pandas.Se o parâmetro as_frame estiver disponível (por exemplo, load_iris)
Se o parâmetro as_frame NÃO estiver disponível (por exemplo, load_boston)
fonte
Trabalhando na melhor resposta e respondendo ao meu comentário, aqui está uma função para a conversão
fonte
Seja o que for que o TomDLT respondeu, pode não funcionar para alguns de vocês porque
porque iris ['feature_names'] retorna um array numpy. Em numpy array você não pode adicionar um array e uma lista ['destino'] apenas pelo operador +. Portanto, você precisa primeiro convertê-lo em uma lista e depois adicionar.
Você pode fazer
Isso vai funcionar bem, embora ..
fonte
Pode haver uma maneira melhor, mas aqui está o que eu fiz no passado e funciona muito bem:
Agora mydata terá tudo que você precisa - atributos, variáveis de destino e nomes de colunas
fonte
mydata = pd.DataFrame(items[1][1])
arremessaTypeError: 'dict_items' object does not support indexing
Este snippet é apenas uma adição sintática construída sobre o que TomDLT e rolyat já contribuíram e explicaram. As únicas diferenças seriam que
load_iris
retornariam uma tupla em vez de um dicionário e os nomes das colunas seriam enumerados.fonte
fonte
Uma das melhores maneiras:
Digits é o dataframe sklearn e eu o converti em um DataFrame do pandas
fonte
Tirei algumas ideias das suas respostas e não sei como torná-las mais curtas :)
Isso dá um Pandas DataFrame com feature_names mais o destino como colunas e RangeIndex (start = 0, stop = len (df), step = 1). Eu gostaria de ter um código mais curto, onde posso ter 'destino' adicionado diretamente.
fonte
A API é um pouco mais limpa do que as respostas sugeridas. Aqui, usando
as_frame
e certificando-se de incluir uma coluna de resposta também.fonte
Aqui está outro exemplo de método integrado que pode ser útil.
Os dados iris_X são importados como pandas DataFrame e os dados iris_y são importados como pandas Series.
fonte
fonte