Regresa a Python

Consulta información de Banco de México con Python

Consulta el tipo de cambio FIX en Banxico

Consulta información de Banco de México con Python
Índice

Consulta de información utilizando la API del Sistema de Información Económica (SIE) de Banxico en pocos pasos.

La API de consulta de Información Económica de Banxico

El API del Sistema de Información Económica permite consultar las series de tiempo de todos los indicadores en el repositorio. Esta herramienta permite la automatización del proceso de extracción de información económica publicada por el Banco de México.

Una API (del inglés, application programming interface, en español, interfaz de programación de aplicaciones) es una pieza de código que permite a dos aplicaciones comunicarse entre sí para compartir información y funcionalidades. Se usan generalmente en bibliotecas de programación. https://es.wikipedia.org/wiki/API#

Una API es como un punto de conexión para hacer consultas Foto de Solen Feyissa en Unsplash

Paso 1: Obtener token de la API

Todas las solicitudes que se realicen al API requieren enviar un token de consulta, por lo cual el primer paso es obtener el token que identificará las peticiones enviadas. Esto le permite a Banxico llevar un control del número de consultas enviadas por token, y bloquear el uso excesivo que pidiera afectar el sistema.

El token de consulta es un requisito necesario para poder utilizar el API de series de tiempo. Consta de 64 caracteres alfanuméricos y debe ser enviado cada vez que se interactúe con los servicios provistos.

Entrar a la página: https://www.banxico.org.mx/SieAPIRest/service/v1/ y llenar los formularios para obtener el token.

El token se genera una sola vez y se usa cuantas veces se necesite, respetando los límites de consulta.

Genera tu token

IMPORTANTE: No compartas el token.

Paso 2: Seleccionar el identificador de la serie de tiempo a consultar

Para esto es necesario consultar el Catálogo de series en https://www.banxico.org.mx/SieAPIRest/service/v1/doc/catalogoSeries

Por ejemplo, para consultar el tipo de cambio FIX hay que navegar por el catálogo:

Catálogo de Series

ID FIX

En este caso, el ID de la serie del tipo de cambio FIX es: SF43718

Paso 3: Consultar utilizando Python

La forma más sencilla es utilizando la librería banxico-api la cual se encarga de todos los detalles interno del manejo de la API

#### instalar la librería (se corre solo una vez)
!pip install banxicoapi
Collecting banxicoapi
  Downloading banxicoapi-1.0.2-py3-none-any.whl.metadata (2.7 kB)
Requirement already satisfied: requests in c:\tools\anaconda3\envs\datascience\lib\site-packages (from banxicoapi) (2.32.3)
Requirement already satisfied: pyyaml in c:\tools\anaconda3\envs\datascience\lib\site-packages (from banxicoapi) (6.0.2)
Requirement already satisfied: charset-normalizer<4,>=2 in c:\tools\anaconda3\envs\datascience\lib\site-packages (from requests->banxicoapi) (3.4.0)
Requirement already satisfied: idna<4,>=2.5 in c:\tools\anaconda3\envs\datascience\lib\site-packages (from requests->banxicoapi) (3.10)
Requirement already satisfied: urllib3<3,>=1.21.1 in c:\tools\anaconda3\envs\datascience\lib\site-packages (from requests->banxicoapi) (2.2.3)
Requirement already satisfied: certifi>=2017.4.17 in c:\tools\anaconda3\envs\datascience\lib\site-packages (from requests->banxicoapi) (2025.4.26)
Downloading banxicoapi-1.0.2-py3-none-any.whl (5.7 kB)
Installing collected packages: banxicoapi
Successfully installed banxicoapi-1.0.2
#### importar la librería
import banxicoapi
### guardar token
token = "ce99e276c8ff03f6d34215c9865___GENERA_TU_TOKEN______"
### generar un objeto tipo API el cual va a manejar las consultas
api = banxicoapi.BanxicoApi(token)
### guardar la serie a consultar en una lista
series = ["SF43718"]
### Consultar TODA la historia
data = api.get(series)
print(data) ## En algunos casos es MUCHA información!!
[{'idSerie': 'SF43718', 'titulo': 'Tipo de cambio                                          Pesos por dólar E.U.A. Tipo de cambio para solventar obligaciones denominadas en moneda extranjera Fecha de determinación (FIX)', 'datos': [{'fecha': '12/11/1991', 'dato': '3.0735'},

{'fecha': '13/11/1991', 'dato': '3.0712'}, {'fecha': '14/11/1991', 'dato': '3.0718'},

{'fecha': '15/11/1991', 'dato': '3.0684'}, {'fecha': '18/11/1991', 'dato': '3.0673'},

{'fecha': '19/11/1991', 'dato': '3.0661'}, {'fecha': '21/11/1991', 'dato': '3.0632'},

{'fecha': '22/11/1991', 'dato': '3.0612'}, {'fecha': '25/11/1991', 'dato': '3.0622'},

{'fecha': '26/11/1991', 'dato': '3.0760'}, {'fecha': '27/11/1991', 'dato': '3.0731'},

{'fecha': '28/11/1991', 'dato': '3.0677'}, {'fecha': '29/11/1991', 'dato': '3.0672'},

{'fecha': '02/12/1991', 'dato': '3.0662'}, {'fecha': '03/12/1991', 'dato': '3.0666'},

{'fecha': '04/12/1991', 'dato': '3.0660'},

...

]}]
### Consultar solo la información entre dos fechas
start_date = "2024-12-31"
end_date = "2025-05-26"
data_in_range = api.get(series, start_date=start_date, end_date=end_date)
## el dato que regresa es de tipo lista
type(data_in_range)
list
data_in_range[0] # el primer dato de la lista es un dictionario
{'idSerie': 'SF43718',
 'titulo': 'Tipo de cambio                                          Pesos por dólar E.U.A. Tipo de cambio para solventar obligaciones denominadas en moneda extranjera Fecha de determinación (FIX)',
 'datos': [{'fecha': '31/12/2024', 'dato': '20.7862'},
  {'fecha': '02/01/2025', 'dato': '20.6917'},
  {'fecha': '03/01/2025', 'dato': '20.6708'},
  {'fecha': '06/01/2025', 'dato': '20.3195'},
  {'fecha': '07/01/2025', 'dato': '20.3440'},
  {'fecha': '08/01/2025', 'dato': '20.3823'},
  {'fecha': '09/01/2025', 'dato': '20.4742'},
  {'fecha': '10/01/2025', 'dato': '20.7045'},
  {'fecha': '13/01/2025', 'dato': '20.8012'},
  {'fecha': '14/01/2025', 'dato': '20.4820'},
  {'fecha': '15/01/2025', 'dato': '20.4875'},
  {'fecha': '16/01/2025', 'dato': '20.7732'},
  {'fecha': '17/01/2025', 'dato': '20.7180'},
  {'fecha': '20/01/2025', 'dato': '20.5430'},
  {'fecha': '21/01/2025', 'dato': '20.6358'},
  {'fecha': '22/01/2025', 'dato': '20.5397'},
  {'fecha': '23/01/2025', 'dato': '20.3943'},
  {'fecha': '24/01/2025', 'dato': '20.2255'},
  {'fecha': '27/01/2025', 'dato': '20.7002'},
  {'fecha': '28/01/2025', 'dato': '20.5668'},
  {'fecha': '29/01/2025', 'dato': '20.5677'},
  {'fecha': '30/01/2025', 'dato': '20.4497'},
  {'fecha': '31/01/2025', 'dato': '20.6068'},
  {'fecha': '04/02/2025', 'dato': '20.4268'},
  {'fecha': '05/02/2025', 'dato': '20.6363'},
  {'fecha': '06/02/2025', 'dato': '20.5125'},
  {'fecha': '07/02/2025', 'dato': '20.5512'},
  {'fecha': '10/02/2025', 'dato': '20.6693'},
  {'fecha': '11/02/2025', 'dato': '20.5680'},
  {'fecha': '12/02/2025', 'dato': '20.4917'},
  {'fecha': '13/02/2025', 'dato': '20.4978'},
  {'fecha': '14/02/2025', 'dato': '20.3082'},
  {'fecha': '17/02/2025', 'dato': '20.2830'},
  {'fecha': '18/02/2025', 'dato': '20.2617'},
  {'fecha': '19/02/2025', 'dato': '20.4208'},
  {'fecha': '20/02/2025', 'dato': '20.3733'},
  {'fecha': '21/02/2025', 'dato': '20.3448'},
  {'fecha': '24/02/2025', 'dato': '20.4640'},
  {'fecha': '25/02/2025', 'dato': '20.4683'},
  {'fecha': '26/02/2025', 'dato': '20.4277'},
  {'fecha': '27/02/2025', 'dato': '20.4722'},
  {'fecha': '28/02/2025', 'dato': '20.5080'},
  {'fecha': '03/03/2025', 'dato': '20.4333'},
  {'fecha': '04/03/2025', 'dato': '20.8518'},
  {'fecha': '05/03/2025', 'dato': '20.3893'},
  {'fecha': '06/03/2025', 'dato': '20.2777'},
  {'fecha': '07/03/2025', 'dato': '20.2830'},
  {'fecha': '10/03/2025', 'dato': '20.2922'},
  {'fecha': '11/03/2025', 'dato': '20.3388'},
  {'fecha': '12/03/2025', 'dato': '20.1828'},
  {'fecha': '13/03/2025', 'dato': '20.0848'},
  {'fecha': '14/03/2025', 'dato': '19.8693'},
  {'fecha': '18/03/2025', 'dato': '19.9845'},
  {'fecha': '19/03/2025', 'dato': '20.0553'},
  {'fecha': '20/03/2025', 'dato': '20.1345'},
  {'fecha': '21/03/2025', 'dato': '20.2163'},
  {'fecha': '24/03/2025', 'dato': '20.1123'},
  {'fecha': '25/03/2025', 'dato': '20.0762'},
  {'fecha': '26/03/2025', 'dato': '20.0963'},
  {'fecha': '27/03/2025', 'dato': '20.3182'},
  {'fecha': '28/03/2025', 'dato': '20.4003'},
  {'fecha': '31/03/2025', 'dato': '20.4380'},
  {'fecha': '01/04/2025', 'dato': '20.3587'},
  {'fecha': '02/04/2025', 'dato': '20.4568'},
  {'fecha': '03/04/2025', 'dato': '19.9708'},
  {'fecha': '04/04/2025', 'dato': '20.5010'},
  {'fecha': '07/04/2025', 'dato': '20.6947'},
  {'fecha': '08/04/2025', 'dato': '20.6867'},
  {'fecha': '09/04/2025', 'dato': '20.7653'},
  {'fecha': '10/04/2025', 'dato': '20.4920'},
  {'fecha': '11/04/2025', 'dato': '20.3363'},
  {'fecha': '14/04/2025', 'dato': '20.1025'},
  {'fecha': '15/04/2025', 'dato': '20.0213'},
  {'fecha': '16/04/2025', 'dato': '19.9737'},
  {'fecha': '21/04/2025', 'dato': '19.6718'},
  {'fecha': '22/04/2025', 'dato': '19.5688'},
  {'fecha': '23/04/2025', 'dato': '19.6278'},
  {'fecha': '24/04/2025', 'dato': '19.5825'},
  {'fecha': '25/04/2025', 'dato': '19.5478'},
  {'fecha': '28/04/2025', 'dato': '19.5723'},
  {'fecha': '29/04/2025', 'dato': '19.5868'},
  {'fecha': '30/04/2025', 'dato': '19.6095'},
  {'fecha': '02/05/2025', 'dato': '19.6570'},
  {'fecha': '05/05/2025', 'dato': '19.6365'},
  {'fecha': '06/05/2025', 'dato': '19.6785'},
  {'fecha': '07/05/2025', 'dato': '19.5880'},
  {'fecha': '08/05/2025', 'dato': '19.5642'},
  {'fecha': '09/05/2025', 'dato': '19.4912'},
  {'fecha': '12/05/2025', 'dato': '19.6162'},
  {'fecha': '13/05/2025', 'dato': '19.4373'},
  {'fecha': '14/05/2025', 'dato': '19.3630'},
  {'fecha': '15/05/2025', 'dato': '19.4780'},
  {'fecha': '16/05/2025', 'dato': '19.5147'},
  {'fecha': '19/05/2025', 'dato': '19.3723'},
  {'fecha': '20/05/2025', 'dato': '19.2648'},
  {'fecha': '21/05/2025', 'dato': '19.3198'},
  {'fecha': '22/05/2025', 'dato': '19.3227'},
  {'fecha': '23/05/2025', 'dato': '19.2748'},
  {'fecha': '26/05/2025', 'dato': '19.2188'}]}
## vamos a graficar los datos
import pandas as pd
import numpy as mp
import matplotlib as plt
# extraer los datos a una lista y extraer fecha y dato
data_df = pd.DataFrame( [x for x in data_in_range[0]["datos"]] )
data_df.head()

fechadato
031/12/202420.7862
102/01/202520.6917
203/01/202520.6708
306/01/202520.3195
407/01/202520.3440
## cambiar el indice y poner las fechas
data_df = data_df.set_index('fecha', drop=True)
data_df.head()

dato
fecha
31/12/202420.7862
02/01/202520.6917
03/01/202520.6708
06/01/202520.3195
07/01/202520.3440
data_df.index = pd.to_datetime(data_df.index, errors='coerce', dayfirst=True)
data_df.dtypes # los datos no están guardados como número, hay que cambiarlos
dato    object
dtype: object
data_df["dato"] = data_df["dato"].astype(float)
data_df.plot()
<Axes: xlabel='fecha'>

Gráfica FIX 2025

Views