3
respostas

problema com data frame criado a partir de groupby

estou tentando criar uma tabela a partir de um groupby

 tp_at_abril = dados_atendimentos_abril.groupby('motivo').sum().sort_values('qtide',ascending=False)
 tp_at_abril.motivo
quando peço para selecionar motivo no novo frame recebo o seguinte erro:

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-78-bbed3a90eee5> in <module>
----> 1 tp_at_abril.motivo

~/.pyenv/versions/3.7.4/lib/python3.7/site-packages/pandas/core/generic.py in __getattr__(self, name)
   5177             if self._info_axis._can_hold_identifiers_and_holds_name(name):
   5178                 return self[name]
-> 5179             return object.__getattribute__(self, name)
   5180 
   5181     def __setattr__(self, name, value):

AttributeError: 'DataFrame' object has no attribute 'motivo'
3 respostas

Olá Marilivia,

Quando você faz um agrupamento por uma coluna e depois aplica alguma função que transforma em DataFrame novamente, a coluna utilizada (motivo) se torna o index do DataFrame.

Então você tem que resetar o index com a função reset_index().

Exemplo:

tp_at_abril = dados_atendimentos_abril.groupby('motivo').sum().sort_values('qtide', ascending=False)

# Reseta o index
tp_at_abril = tp_at_abril.reset_index()

tp_at_abril.motivo

bom dia, fiz o reset, porém continua dando o msm errro

tp_at_abril = dados_atendimentos_abril.groupby('motivo').sum().sort_values('qtide',ascending=False)

tp_at_abril.reset_index()

tp_at_abril.motivo

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-37-bbed3a90eee5> in <module>
----> 1 tp_at_abril.motivo

~/.pyenv/versions/3.7.4/lib/python3.7/site-packages/pandas/core/generic.py in __getattr__(self, name)
   5177             if self._info_axis._can_hold_identifiers_and_holds_name(name):
   5178                 return self[name]
-> 5179             return object.__getattribute__(self, name)
   5180 
   5181     def __setattr__(self, name, value):

AttributeError: 'DataFrame' object has no attribute 'motivo'

Bom dia, o reset_index não altera o valor do DataFrame, ele retorna um novo DataFrame.

Tem que ser assim:

tp_at_abril = tp_at_abril.reset_index()

Ou assim:

tp_at_abril.reset_index(inplace=True)