Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

KeyError: 'Intensidade_de_cor'

Código

import plotly.graph_objects as go

fig = go.Figure()
fig.add_trace(go.Scatter(x=df['Intensidade_de_cor'], y = df['Alcool'],
                                                        mode = 'markers',                      
                                                        marker = dict(color = agrupador.labels_.astype(np.float)),
                                                        text = labels))
fig.show()

Erro

/usr/local/lib/python3.7/dist-packages/pandas/core/frame.py in __getitem__(self, key)
   3456             if self.columns.nlevels > 1:
   3457                 return self._getitem_multilevel(key)
-> 3458             indexer = self.columns.get_loc(key)
   3459             if is_integer(indexer):
   3460                 indexer = [indexer]

/usr/local/lib/python3.7/dist-packages/pandas/core/indexes/range.py in get_loc(self, key, method, tolerance)
    386                 except ValueError as err:
    387                     raise KeyError(key) from err
--> 388             raise KeyError(key)
    389         return super().get_loc(key, method=method, tolerance=tolerance)
    390 

KeyError: 'Intensidade_de_cor'
3 respostas

Olá, Wesley! Tudo tranquilo por aí?

Há algumas possibilidades que pode está causando este erro, como por exemplo:

  • O kernel do seu notebook resetou e você está tentando executar alguma célula que depende de outra feita anteriormente. Para resolver isso, caso seja o caso, você pode está fazendo da seguinte forma:

Colab:

Barra superior de opções do ambiente do Google Colab com um retângulo de contorno vermelho sem preenchimento que enfatiza a opção "Ambiente de execução" e uma seta vermelha aponta para a opção "Reiniciar e executar tudo". Jupyter:

Barra superior de funções do Jupyter Notebook, com um retângulo vermelho sem preenchimento destacando a opção Kernel, uma seta vermelha apontando para a opção Restart & Run All.

  • Outro motivo é que você pode ter definido o nome diferente do que o instrutor utiliza. O instrutor renomear as colunas com o seguinte trecho de código:
# Renomeando o nome de algumas colunas para português

df = df.rename(columns={
    'Alcohol': 'Alcool',
    'Ash': 'Po',
    'Ash_Alcanity': 'Alcalinidade_po',
    'Magnesium': 'Magnesio',
    'Color_Intensity': 'Intensidade_de_cor'})

df.head()

Verifique se os nomes que você utilizou para renomear para português correspondem ao utilizado em aula, principalmente o "Intensidade_de_cor" que é onde está apresentado erro.

Caso nenhuma dessas opções te ajude, solicito que nos encaminhe o seu notebook para analisarmos melhor e sermos mais assertivos na resposta. Uma opção é upar no drive e nos encaminhar o link.

Espero ter ajudado, mas se ainda persistir alguma dúvida estou sempre à disposição.

:)

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.Bons Estudos!

Fiz os dois procedimentos e continua acusando o mesmo erro. Troquei x para ['Magnesio'] e o erro ficou KeyError: 'Magnesio'.

Código completo

pip install biokit

import matplotlib.pyplot as plt
import pandas as pd
import numpy as np

caminho_arquivo = "https://raw.githubusercontent.com/alura-cursos/Clustering/Aula-1.-An%C3%A1lise-Explorat%C3%B3ria/Wine.csv"
df = pd.read_csv(caminho_arquivo) 

print("O dado possui",df.shape[0], "amostras e", df.shape[1], "atributos")
df.head()

df = df.rename(columns={
    'Alcohol': 'Alcool',
    'Ash': 'Po',
    'Ash_Alcanity': 'Alcalinidade_po',
    'Magnesium': 'Magnesio',
    'Color_Intensity': 'Intensidade_de_cor'})

df.head()
df.describe()

matriz_corr = df.corr()
from biokit.viz import corrplot
import matplotlib.pyplot as plt

corr_graf = corrplot.Corrplot(matriz_corr)
corr_graf.plot(upper = 'ellipse', fontsize = 'large')
fig = plt.gcf()
fig.set_size_inches(15,10)
fig.show()

atributos = df.columns

for atributo in atributos:
    df[atributo] = (df[atributo]-min(df[atributo]))/max(df[atributo]-min(df[atributo]))

from sklearn import preprocessing

min_max_scaler = preprocessing.MinMaxScaler()
np_df = min_max_scaler.fit_transform(df)

df = pd.DataFrame(np_df)
df.describe()

from sklearn.cluster import KMeans
agrupador = KMeans(n_clusters = 4)
agrupador.fit(df)

labels = agrupador.labels_
print(labels)

agrupador = KMeans(n_clusters=4)
agrupador.fit(df)
labels = agrupador.labels_
print(labels)

fig = go.Figure()

fig.add_trace(go.Scatter(x=df['Magnesio'],
                         y = df['Alcool'], mode = 'markers',                      
                          marker = dict(color = agrupador.labels_.astype(np.float)),
                        text = labels))

Erro

KeyError                                  Traceback (most recent call last)
<ipython-input-37-571ca4fea43c> in <module>()
----> 1 fig.add_trace(go.Scatter(x=df['Magnesio'],
      2                          y = df['Alcool'], mode = 'markers',
      3                           marker = dict(color = agrupador.labels_.astype(np.float)),
      4                         text = labels))

1 frames
/usr/local/lib/python3.7/dist-packages/pandas/core/frame.py in __getitem__(self, key)
   3456             if self.columns.nlevels > 1:
   3457                 return self._getitem_multilevel(key)
-> 3458             indexer = self.columns.get_loc(key)
   3459             if is_integer(indexer):
   3460                 indexer = [indexer]

/usr/local/lib/python3.7/dist-packages/pandas/core/indexes/range.py in get_loc(self, key, method, tolerance)
    386                 except ValueError as err:
    387                     raise KeyError(key) from err
--> 388             raise KeyError(key)
    389         return super().get_loc(key, method=method, tolerance=tolerance)
    390 

KeyError: 'Magnesio'
solução!

Olá novamente Wesley!

O erro encontrado por você está acontecendo por causa dessa linha aqui:

df = pd.DataFrame(np_df)

Dessa forma você está atribuindo para variável df, que é seu conjunto de dados originais, um novo DataFrame normalizado pelo seguinte trecho de código: np_df = min_max_scaler.fit_transform(df). O erro está acontecendo porque quando você utiliza o método .fit_transform(df) o nome das colunas não são preservados, ou seja você precisa atribuir o nome novamente para as colunas desse seu novo DataFrame.

Para fazer isso você pode colocar o nome das colunas através da variável atributos, que é uma variável que contém o nome das colunas (atributos = df.columns). O código completo já com a alteração encontra-se abaixo:

import matplotlib.pyplot as plt
import pandas as pd
import numpy as np

caminho_arquivo = "https://raw.githubusercontent.com/alura-cursos/Clustering/Aula-1.-An%C3%A1lise-Explorat%C3%B3ria/Wine.csv"
df = pd.read_csv(caminho_arquivo) 

print("O dado possui",df.shape[0], "amostras e", df.shape[1], "atributos")
df.head()

df = df.rename(columns={
    'Alcohol': 'Alcool',
    'Ash': 'Po',
    'Ash_Alcanity': 'Alcalinidade_po',
    'Magnesium': 'Magnesio',
    'Color_Intensity': 'Intensidade_de_cor'})

df.head()
df.describe()

matriz_corr = df.corr()

from biokit.viz import corrplot
import matplotlib.pyplot as plt

corr_graf = corrplot.Corrplot(matriz_corr)
corr_graf.plot(upper = 'ellipse', fontsize = 'large')
fig = plt.gcf()
fig.set_size_inches(15,10)
fig.show()

atributos = df.columns

for atributo in atributos:
    df[atributo] = (df[atributo]-min(df[atributo]))/max(df[atributo]-min(df[atributo]))

from sklearn import preprocessing

min_max_scaler = preprocessing.MinMaxScaler()
np_df = min_max_scaler.fit_transform(df)

df = pd.DataFrame(np_df, columns=atributos)
df.describe()

from sklearn.cluster import KMeans
agrupador = KMeans(n_clusters = 4)
agrupador.fit(df)

labels = agrupador.labels_
print(labels)

agrupador = KMeans(n_clusters=4)
agrupador.fit(df)
labels = agrupador.labels_
print(labels)

fig = go.Figure()

fig.add_trace(go.Scatter(x=df['Magnesio'],
                         y = df['Alcool'], mode = 'markers',                      
                          marker = dict(color = agrupador.labels_.astype(np.float64)),
                        text = labels))
Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.Bons Estudos!