1
resposta

Qual a diferença entre os dois códigos?

Na última aula do curso de Python Pandas, me surgiu uma dúvida. Primeiramente que eu ainda não conheço essa estrutura "for ... in " então isso já dificulta um pouco hahaha. (inclusive se puderem dar dicar de qual curso/material fazer/estudar para aprender essa estrutura).

Quando eu executo o seguinte código:

for tipo in grupo_tipo.groups.keys():
    eh_tipo = dados['Tipo'] == tipo
    eh_dentro_limite = (dados['Valor'] >= limite_inferior[tipo]) & (dados['Valor'] <= limite_superior[tipo])
    selecao = eh_tipo & eh_dentro_limite
    dados[selecao]

Não é executado para todos os tipos de imóveis que foram declarados no for tipo, que são (Apartamento, Casa, Casa de Condomínio, Casa de Vila, Quitinete), só roda para o quitinete.

Porém, quando eu rodo o código debaixo:

dados_new = pd.DataFrame()
for tipo in grupo_tipo.groups.keys():
    eh_tipo = dados['Tipo'] == tipo
    eh_dentro_limite = (dados['Valor'] >= limite_inferior[tipo]) & (dados['Valor'] <= limite_superior[tipo])
    selecao = eh_tipo & eh_dentro_limite
    dados_selecao = dados[selecao]
    dados_new = pd.concat([dados_new, dados_selecao])

Ele executa para todos os tipos de imóveis, como se fosse um ciclo. Gostaria de entender o porquê disso acontecer.

Desde já, muito obrigado.

1 resposta

Boas Ronaldo! Tudo bem?

O que estamos lidando aqui é com uma estrutura de repetição ou laço, essas estruturas são responsáveis por rodar uma série de códigos diversas vezes sem a necessidade de ecrrevê-la diversas vezes.

Mais espeficicamente, a estrutura for in roda em qualquer lista, tupla ou dicionário, excecutando o código dentro do bloco para cada elemento da lista. Vou dar um exemplo:

Considere uma lista:

lista = ['Banana', 'Maça', 'Pêra', 'Melancia']

Quando executamos um bloco for in dentro desta lista, estamos excecutando os comando para cada elemento dentro da lista. Podemos, por exemplo, vizualizar cada elemento:

for fruta in lista:
    print(fruta)

que retorna:

Banana
Maça
Pêra
Melancia

Nesse caso, lista se refere à variável lista que foi criada mais cedo, mas fruta é um nome arbitrário, e pode ser substituído por qualquer outro nome de sua escolha, sendo que a cada iteração da função (cada vez que o for passsar por um novo item da lista, esse valor é atualizado.

No caso do código que você mostrou, o que ocorre é exatamente o que você comentou, ele roda para cada grupo selecionado a mesma série de comandos, concatenando os que nos são interessantes e criando um novo dataframe com eles.

Você pode aprender mais sobre estruturas de repetição no python no 'Python 3 parte 2: Avançando na linguagem', ou mesmo 'Python para Data Science: Primeiros passos'. O primeiro com uma abordagem mais generalista e o segundo mais aplicado à Data Science.

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