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

'DataFrameGroupBy' object has no attribute 'nlargest' Como corrigir?

Bom dia! O nlargest funciona em dados, mas dá erro em grupo_bairros. Como faço?

Veja o código:

dados = pd.read_csv('aluguel.csv', sep=';')   # Carregar o arquivo csv
bairros = ['Barra da Tijuca', 'Copacabana', 'Ipanema', 'Leblon', 'Botafogo', 'Flamengo', 'Tijuca']
selecao = dados['Bairro'].isin(bairros)
dados = dados[selecao]
grupo_bairros = dados.groupby('Bairro')

dados.nlargest(3, ['Valor'])                        # Este funciona
grupo_bairros.nlargest(3, ['Valor'])          # Mas este não funciona. Porque?

Devolve esta mensagem de erro:

AttributeError: 'DataFrameGroupBy' object has no attribute 'nlargest'
5 respostas
solução!

Olá, Lyse! Tudo bem com você?

Esse erro acontece porque uma das variáveis possui o método .nlargest() e a outra não.

O tipo DataFrame possui o método .nlargest() como podemos olhar na documentação (uma Series também possui esse método). A variável dados é do tipo DataFrame, podemos constatar isso com o seguinte comando:

type(dados)

Saída:

pandas.core.frame.DataFrame

Mas quando você executa a linha de código grupo_bairros = dados.groupby('Bairro') não é retornado uma variável do tipo DataFrame ou Series do pandas e sim um DataFrameGroupBy, que seria um DataFrame agrupado, e esse tipo de variável não possui o método .nlargest(). A variável grupo_bairros é do tipo DataFrameGroupBy, podemos verificar isso com o seguinte comando:

type(grupo_bairros)

Saída:

pandas.core.groupby.generic.DataFrameGroupBy

Você pode consultar os métodos desse tipo de variável nessa documentação.

Para entender as diferenças entre um DataFrame e Series deixo este tópico como leitura complementar.

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

:)

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

Olá Bruno, Obrigada pela resposta. Mas eu gostaria de saber como resolver. Posso salvar o DataFrameGroupBy em csv, e depois ler o csv, criando um DataFrame normal. Mas acho que é muito código, muito vai e volta. Tem uma forma de fazer, que não seja essa? Como faz

Fui tentar fazer o to_csv, e também não funciona. Nem assim. Então fica a pergunta. Como fazer?

Olá, Lyse!

Imagino que você está tentando pegar os 3 maiores valores agrupados por bairros. Pensei em uma solução, espero que seja o que você está procurando:

import pandas as pd 

dados = pd.read_csv('aluguel.csv', sep=';')   # Carregar o arquivo csv
bairros = ['Barra da Tijuca', 'Copacabana', 'Ipanema', 'Leblon', 'Botafogo', 'Flamengo', 'Tijuca']
selecao = dados['Bairro'].isin(bairros)
dados = dados[selecao]
grupo_bairros = dados.groupby('Bairro')

# dados.nlargest(3, ['Valor']) 

for bairro, data in grupo_bairros:
    print(f"Bairro: {bairro}\n\n{data.nlargest(3, ['Valor'])}", end='\n\n')

Esses \n foi somente para deixar a impressão mais organizada.

O professor explica os detalhes desse for nessa aula aos 06:10. Foi possível utilizar o método .nlargest() pois a variável data é um DataFrame, conforme exemplifica o instrutor na aula mencionada.

Se ainda não for o que você está procurando, me retorne com mais detalhes sobre o que você deseja fazer para sermos mais assertivos na resposta.

Fico à disposição.

Bons estudos. ^^

:)

Perfeito. Muito obrigada