python-bcb
python-bcb copied to clipboard
Filtro de `DataReferencia` não está funcionando
Olá, ao fazer uma consulta na Entity Expectativas eu não consigo filtrar pela DataReferencia. Veja:
from bcb import Expectativas
ep = em.get_endpoint("ExpectativaMercadoMensais")
dtest = (ep.query().filter(ep.DataReferencia <= '2022-01-01').collect())
dtest['DataReferencia'].max()
'12/2024'
A DataReferencia retornada é maior que a solicitada. Estou fazendo algo errado?
# Obs.: Para o campo `Data` funciona
dtest = (ep.query().filter(ep.Data <= '2010-01-01').collect())
dtest['Data'].max()
'2009-12-31'
@guilhermeparreira Parece ser por conta de uma diferença na formatação do valor DataReferencia.
Enquanto a Data é especificada em formato 'YYYY-mm-dd', a DataReferencia é especificada em formato 'mm/YYYY'.
Exemplo:
from bcb import Expectativas
expec = Expectativas()
mensais = expec.get_endpoint('ExpectativaMercadoMensais')
data = (
mensais
.query()
.filter(mensais.DataReferencia <= '12/2022')
.collect()
)
data.DataReferencia.max()
'12/2022'
Uma forma de contornar isso é utilizar um datetime nos filtro de data, com DataReferencia. Talves a alteração do @apsvieira (Issue #3) ajude com isso.
Seria algo como
from datetime import datetime
from bcb import Expectativas
expec = Expectativas()
mensais = expec.get_endpoint('ExpectativaMercadoMensais')
data = (
mensais
.query()
.filter(mensais.DataReferencia <= datetime(2022,12,1))
.collect()
)
data.DataReferencia.max()
isso é bom pq o usuário não precisa conhecer a formatação de datas da API. Mas as formatações mudam, de um endpoint para outro, então é preciso mapear isso.