2
respostas

Bairros Query

Por que você utiliza o sinal de + e transforma a lista em uma string no código abaixo ?

tabela_zona_sul = bairros.unstack().query("index in " + str(bairros_zona_sul)).droplevel(level=0, axis=1)
tabela_zona_sul
2 respostas

Olá pessoal, boa tarde.

Já tem 1 mês que eu lancei essa dúvida aqui no fórum e não obtive o retorno ainda.

Oii Rafael! Tudo certinho?

Peço desculpas pela demora em te dar um retorno.

Essa query é realizada para selecionar apenas os índices que estão localizados na lista bairros_zona_sul.

Como bairros_zona_sul é uma variável que foi criada antes de fazermos a query, para conseguirmos acessar o conteúdo dessa variável, precisamos informar para o método query que aquilo se trata de uma variável. Além disso, por ser uma variável que armazena uma lista, é importante que o método query consiga percorrer cada um dos elementos dessa lista para verificar se eles existem no index.

Sendo assim, ao fazer "index in " + str(bairros_zona_sul) a query consegue identificar que bairros_zona_sul é uma variável e, por meio do método str, essa query conseguirá percorrer cada um dos elementos da lista e verificar se eles estão no index. Por baixo dos panos, é como se ela fizesse essa análise da seguinte forma:

# lista com os bairros
bairros_zona_sul = ['Ipanema', 'Botafogo', 'Catete', 'Copacabana', 'Lagoa', 'Flamengo', 'Gávea', 'Glória', 'Humaitá',
                    'Jardim Botânico', 'Laranjeiras', 'Leme', 'Urca', 'Vidigal', 'Cosme Velho', 'São Conrado', 'Rocinha',
                    'Leblon']

# Exemplo de como funcionaria essa análise "por baixo dos panos"

# primeiro bairro
tabela_zona_sul = bairros.unstack().query("index in 'Ipanema'").droplevel(level=0, axis=1)

# segundo bairro
tabela_zona_sul = bairros.unstack().query("index in 'Botafogo'").droplevel(level=0, axis=1)

# terceiro bairro
tabela_zona_sul = bairros.unstack().query("index in 'Catete'").droplevel(level=0, axis=1)

O " + " portanto, é utilizado para concatenar o "index in" com cada um dos bairros e fazer a devida seleção.

Uma outra forma de fazer query utilizando listas, seria assim:

tabela_zona_sul = bairros.unstack().query("index in @bairros_zona_sul").droplevel(level=0, axis=1)
tabela_zona_sul

Esse "@" funcionaria de forma semelhante ao "str" mostrado no código anterior, permitindo que a query possa acessar cada elemento da lista e fazer a seleção dos dados.

Espero que essa explicação tenha te ajudado a entender melhor :)

Qualquer dúvida me avisa, tá bom? Estarei por aqui.

Bons estudos!