python-bcb icon indicating copy to clipboard operation
python-bcb copied to clipboard

Filtro de `DataReferencia` não está funcionando

Open guilhermeparreira opened this issue 2 years ago • 2 comments

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 avatar May 12 '23 17:05 guilhermeparreira

@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'

apsvieira avatar Jul 01 '23 15:07 apsvieira

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.

wilsonfreitas avatar Jul 05 '23 08:07 wilsonfreitas