2
respostas

Query para dataframes distintos

Nos casos mostrados na aula, a query só funciona se as colunas estiverem no mesmo dataframe, certo? E se as colunas estiverem em dataframes distintos. Considere o emplo a seguir:

devolucao_mes_devolucao = mes_devolucao.query("CD_RUB == 1 or mes_intervalo.CD_RUB == 2")

Repare que eu eu tenho o df mes_devolucao (que eu estou aplicando a query), e na query propriamente dita, eu preciso consultar a coluna CD_RUB de um outro df, no caso, mes_intervalo, porem, do jeito que está, naturalmente, vai dar erro.

Como posso ajustar isso:?

2 respostas

Olá, Rogério! Tudo bem com você?

Uma forma de contornar isso é juntar as informações desses dois DataFrames em um outro DataFrame e então realizar a query. Podemos fazer isso com o método Join que você encontra como fazer sua utilização no tópico Como funciona o JOIN?.

Há outros métodos que é possível fazer essa junção entre os DataFrames e o Pandas oferece uma documentação bem completa em relação a isso, que está disponível em Merge, join, concatenate and compare.

Qualquer dúvida estou à disposição. Bons estudos.

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

Olá, boa noite Rogério!

Não é possível efetuar uma query, dentro de outra query. O Python, não compreende este tipo de passagem muito bem, e acaba gerando um erro. Entretanto, nem tudo esta perdido. É possível, efetuar este comparação que você quer por meios paralelos.

import pandas as pd

imoveis_sudeste = [
    {'Tipo':'Casa','Número de quartos':6,'Estado':'MG','Area de lazer': True, 'Garagem': True,'Interesse':'Venda','Valor':230500.00},
    {'Tipo':'Apartamento','Número de quartos':4,'Estado':'SP','Area de lazer': False, 'Garagem': False,'Interesse':'Aluguel','Valor':900.00},
    {'Tipo':'Chácara','Número de quartos':12,'Estado':'MG','Area de lazer': True, 'Garagem': True,'Interesse':'Venda','Valor':400700.00},
    {'Tipo':'Casa','Número de quartos':4,'Estado':'RJ','Area de lazer': False, 'Garagem': False,'Interesse':'Venda','Valor':140000.00},
]

imoveis_sul = [
    {'Tipo':'Apartamento','Número de quartos':5,'Estado':'RS','Area de lazer': True, 'Garagem': True,'Interesse':'Aluguel','Valor':1400.00},
    {'Tipo':'Apartamento','Número de quartos':4,'Estado':'PR','Area de lazer': False, 'Garagem': True,'Interesse':'Venda','Valor':190600.00},
    {'Tipo':'Chácara','Número de quartos':12,'Estado':'SC','Area de lazer': True, 'Garagem': True,'Interesse':'Venda','Valor':400700.00},
    {'Tipo':'Casa','Número de quartos':4,'Estado':'SC','Area de lazer': False, 'Garagem': False,'Interesse':'Aluguel','Valor':1580.00},
]

# Dois DataFrames
dataset_imoveis_sudeste = pd.DataFrame(imoveis_sudeste)
dataset_imoveis_sul = pd.DataFrame(imoveis_sul)

Executando a comparação que você repassou:

# Utilizando uma variavel para duas querys em dois DataFrames distintos
tipo = dataset_imoveis_sudeste.query('Tipo == "Casa"' and dataset_imoveis_sul.query('Tipo == "Casa"'))
tipo

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Conforme apresentado, o Python informa que necessita de uma string a ser avaliada, e não um outro DataFrame, utilizando o metodo query. Agora, vem alguns exemplos que podem ser aplicados para contornar isto:

A mais simples:

# Utilizando uma variável para cada query de DataFrame
tipo_sudeste = dataset_imoveis_sudeste.query('Tipo == "Casa"')
tipo_sul = dataset_imoveis_sul.query('Tipo == "Casa"') 
# Utilizando o metodo merge para combinar ambos DataFrame
# parametros: nome do data frame ; combinar ambos sem perda
tipo_sudeste_sul = pd.merge(tipo_sudeste,tipo_sul, how='outer')
tipo_sudeste_sul

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

A gambiarra:

# Utilizando função para descompactar a lista
# e junta-las antes de fazer a query
def descompacta(lista_salvar,lista):
  for item in lista:
    lista_salvar.append(item)
  return lista_salvar

tipo_sudeste_sul= list()
descompacta(tipo_sudeste_sul,imoveis_sudeste)
descompacta(tipo_sudeste_sul,imoveis_sul)

dataset_tipo_sudeste_sul = pd.DataFrame(tipo_sudeste_sul)
dataset_tipo_sudeste_sul.query('Tipo == "Casa"')

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Então, agora fica ao seu critério. Pode utilizar um dos meios informados, ou inventar um que mais lhe auxilie em seu problema.

Bons estudos! Pratique. ">