-
-
Save cabreu145/ab5ec71715e1b065ff188b3eefb2ee4e to your computer and use it in GitHub Desktop.
Convertir el archivo Excel del catálogo CABYS del Banco Central de Costa Rica, a un archivo JSON en el formato API Ministerio de Hacienda
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from pandas import read_excel | |
import json | |
URL = 'https://www.bccr.fi.cr/indicadores-economicos/cabys/Catalogo-de-bienes-servicios.xlsx' | |
# Los nombres de las columnas Excel vs nombres cortos y eventualmente | |
# propiedades del json | |
cols = { | |
'Descripción (categoría 1)': 'c1', | |
'Descripción (categoría 2)': 'c2', | |
'Descripción (categoría 3)': 'c3', | |
'Descripción (categoría 4)': 'c4', | |
'Descripción (categoría 5)': 'c5', | |
'Descripción (categoría 6)': 'c6', | |
'Descripción (categoría 7)': 'c7', | |
'Descripción (categoría 8)': 'c8', | |
'Código del bien o servicio': 'codigo', | |
'Descripción del bien o servicio': 'descripcion', | |
'Impuesto': 'impuesto' | |
} | |
# Leer el Excel del BCCR y cargarlo en un DataFrame (df_cabys), utilizar la primera hoja (Cabys), | |
# utilizar el encabezado ubicado en la segunda fila y extraer únicamente las columnas | |
# necesarias y definidas en cols.keys() | |
df_cabys = read_excel( | |
URL, | |
sheet_name='Cabys', | |
header=1, | |
usecols=cols.keys()) | |
# Renombrar los nombres de las columnas con el nombre de las propiedades json a partir | |
# del diccionario cols | |
df_cabys.rename(columns=cols, inplace=True) | |
# Cargar las 8 categorias en un solo campo (tupla), representada en el json como un array | |
df_cabys['categorias'] = df_cabys[list(cols.values())[0:8]].apply( | |
lambda x: (x['c1'], x['c2'], x['c3'], x['c4'], x['c5'], x['c6'], x['c7'], x['c8']), axis=1) | |
# Todos los valores no numéricos (Exento y na) en impuesto quedan en 0. Los valores con | |
# porcentaje (13%, 4%, 2%, 1%), como entero (13, 4, 2, 1) | |
df_cabys['impuesto'] = df_cabys['impuesto'].apply( | |
lambda x: 0 if x.isalpha() else int(x.replace('%', ''))) | |
# Eliminar las 8 categorias como campos individuales para no convertirlas en el json | |
df_cabys.drop(list(map(lambda x: f"c{x}", range(1, 9))), axis=1, inplace=True) | |
# Cargar el DataFrame ya modificado en un json | |
json_cabys = json.loads(df_cabys.to_json(orient="records")) | |
# Vaciar el json en el archivo cabys.json | |
with open('cabys.json', 'w', encoding='utf-8') as f: | |
json.dump(json_cabys, f, ensure_ascii=False, indent=2) | |
#print(json.dumps(json_cabys, ensure_ascii=False, indent=2)) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment