1
resposta

Erro no código, não foi possível resolver pela IA

Bom dia, ao rodar o código...


df_vendas_reg = vendas.copy()
df_vendas_reg = df_vendas_reg[['data_pedido','regiao', 'vendas']]
df_vendas_reg['ano'] = df_vendas_reg.data_pedido.dt.year
df_vendas_reg.drop(labels = "data_pedido", axis = 1, inplace = True)

df_vendas_reg' 

...consegui obter a tabela como na aula, mas quando rodei o código...

vendas_reg = pd.crosstab(index = df_vendas_reg.regiao, columns = df_vendas_reg.ano, values = df_vendas_reg.vendas,
                        aggfunc = 'sum')
vendas_reg = vendas_reg[["Sudeste", "Nordeste", "Centro-Oeste", "Norte", "Sul"]]
vendas_reg

...obtive o erro:

---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
Cell In[66], line 5
      2 vendas_reg = pd.crosstab(index = df_vendas_reg.regiao, columns = df_vendas_reg.ano, values = df_vendas_reg.vendas,
      3                         aggfunc = 'sum')
      4 # Ajustando a tabela em ordem descrescente dos estados que mais executam vendas
----> 5 vendas_reg = vendas_reg[["Sul", "Norte", "Centro-Oeste", "Nordeste", "Sudeste"]]
      7 vendas_reg

File ~\anaconda3\Lib\site-packages\pandas\core\frame.py:3767, in DataFrame.__getitem__(self, key)
   3765     if is_iterator(key):
   3766         key = list(key)
-> 3767     indexer = self.columns._get_indexer_strict(key, "columns")[1]
   3769 # take() does not accept boolean indexers
   3770 if getattr(indexer, "dtype", None) == bool:

File ~\anaconda3\Lib\site-packages\pandas\core\indexes\base.py:5877, in Index._get_indexer_strict(self, key, axis_name)
   5874 else:
   5875     keyarr, indexer, new_indexer = self._reindex_non_unique(keyarr)
-> 5877 self._raise_if_missing(keyarr, indexer, axis_name)
   5879 keyarr = self.take(indexer)
   5880 if isinstance(key, Index):
   5881     # GH 42790 - Preserve name from an Index

File ~\anaconda3\Lib\site-packages\pandas\core\indexes\base.py:5938, in Index._raise_if_missing(self, key, indexer, axis_name)
   5936     if use_interval_msg:
   5937         key = list(key)
-> 5938     raise KeyError(f"None of [{key}] are in the [{axis_name}]")
   5940 not_found = list(ensure_index(key)[missing_mask.nonzero()[0]].unique())
   5941 raise KeyError(f"{not_found} not in index")

KeyError: "None of [Index(['Sul', 'Norte', 'Centro-Oeste', 'Nordeste', 'Sudeste'], dtype='object', name='ano')] are in the [columns]"

Na aula não apareceu isso e a IA da Alura não conseguiu me ajudar. Alguém poderia me ajudar?

1 resposta

Oi, Thiago! Como você está?

Para criarmos a tabela, precisamos considerar o valor do parâmetro index igual a df_vendas_reg.ano e o valor de columns igual a df_vendas_reg.regiao. Observe que, em seu código, essas informações foram trocadas!

Sendo assim, após alterar esse detalhe, chegaremos nesta sequência de comandos:

vendas_reg = pd.crosstab(index = df_vendas_reg.ano, columns = df_vendas_reg.regiao,
                         values = df_vendas_reg.vendas, aggfunc = "sum")

vendas_reg = vendas_reg[["Sudeste", "Nordeste", "Centro-Oeste", "Norte", "Sul"]]
vendas_reg

O resultado final será este aqui:

anoSudesteNordesteCentro-OesteNorteSul
2016739602.18378521.83121653.63101580.5761294.12
2017803005.61320804.28149215.0124164.4791990.16
20181033836.21401365.77208068.71108710.09132180.63
20191146764.08600738.87257781.18170311.34129410.82

Espero ter ajudado, Thiago! Se surgirem novas dúvidas, pode contar comigo.

Um abraço!

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