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

Criacao do new DataFrame dentro do FOR

Olá, mais uma entre várias dúvidas a respeito do For dessa aula. Vamos lá

    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])

A primeira linha ele faz a comparação para saber se cada um dos objetos dentro do DataFrame correndo ao tipo é o mesmo atualmente sendo visto no loop. Caso tipo == 'Apartamento' e o ['Tipo'] == casa o resultado é False e caso ['Tipo'] == 'Apartamento entao o resultado é True, certo?


eh_dentro_limite = (dados['Valor'] >= limite_inferior[tipo]) & (dados['Valor'] <= limite_superior[tipo])

Pois bem, na segunda linha, ele compara todos os objetos dentro do Dataframe dados para saber se o valor esta dentro do limite, porém aqui começam meus problemas. Essa comparação ira funcionar para todos os objetos, certo? Não apenas os apartamentos, pois dados não está especificando o tipo, apenas está dizendo para usar a coluna valor para comparação. Caso tenha um dataframe, onde o valor da casa esteja dentro dos limites do apartamento, essa comparação retornara True



selecao = eh_tipo & eh_dentro_limite

Na terceira linha uma nova comparação é feita, caso o eh_tipo seja True, e o eh_dentro_limite, também seja true, selecao será true, qualquer outro resultado, ele será false, certo?

Pois bem, agora que realmente as coisas param de fazer sentido pra mim Na quarta linha

`dados_selecao = dados[selecao]`

a informacao de selecao é apenas true ou false, ou seja

`dados_selecao = dados[true]`

como o dados sabe oque retornar? Se a unica informacao que passei foi true ou false? Aqui nao foi passado nenhum indice ou coluna, apenas um valor boleano, em um dataFrame de valores nao booleanos.

2 respostas
solução!

Olá, Renan! Tudo bem? Espero que sim!

Vamos lá!

Visto que temos várias dúvidas por aqui, vamos por partes:

Filtro de Valores

No trecho:



Pois bem, na segunda linha, ele compara todos os objetos dentro do Dataframe dados para saber se o valor esta dentro do limite, porém aqui começam meus problemas. Essa comparação ira funcionar para todos os objetos, certo? Não apenas os apartamentos, pois dados não está especificando o tipo, apenas está dizendo para usar a coluna valor



Resposta: Sim, o filtro eh_dentro_limite compara todos os valores independente do tipo (no momento), e faz isso para cada tipo dentro do laço For. E não tem problema algum em fazê-lo, visto que depois esse filtro só será usado quando aplicarmos outro filtro (eh_tipo) que vai garantir a redução dos dados para os valores respectivos de cada tipo.

Então olhando de maneira pontual, estamos analisando todos os dados em favor de um tipo, mas logo depois nós consideramos apenas os tipos de cada classe.

Mas quando juntamos os dois filtros com uma operação de AND (&), o valor True só é retornando quando AMBAS as expressões são verdadeiras, então mesmo que o limite esteja dentro do valor, se o tipo não for condizente ao laço observado, o valor será simplesmente descartado da análise. Como você também bem o comenta na parte:

"Na terceira linha uma nova comparação é feita, caso o eh_tipo seja True, e o eh_dentro_limite, também seja true, selecao será true, qualquer outro resultado, ele será false, certo?"

Resposta: Então sim, certo. E observe que o resultado é True ou False a depender da linha, o que nós leva para a sua próxima dúvida:

Seleção no DataFrame

No trecho:



a informacao de selecao é apenas true ou false, ou seja

dados_selecao = dados[selecao]

a informacao de selecao é apenas true ou false, ou seja

dados_selecao = dados[true]


Resposta: Essa anfirmação é incorreta. A variável selecao é uma pandas.Series, que possui valores True e False, um para cada linha. E quando nós temos uma pd.Series que é colocada como filtro em um DataFrame, todas as linhas que constam o valor True são apresentadas para a variável dados_selecao, por sua vez, as de valor False não entram nesse processo.



Se ainda tiver alguma dúvida, estou por aqui. Ótimos estudos e grande abraço!

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

Não é necessário fechar o tópico, outras pessoas podem ser ajudadas por ele :D

Entendi. Acho que vou fazer algumas aulas de python pra me acostumar com a linguagem. Ela com certeza é um tanto diferente das outras linguagens comuns que geralmente costumo trabalhar.