Show code cell source
import os
# Por precaución, cambiamos el directorio activo de Python a aquel que contenga este notebook
if "PAD-book" in os.listdir():
os.chdir(r"PAD-book/Laboratorio-Computacional-de-Analytics/S4 - Explorar, modificar y visualizar bases de datos/S4.TU2/")
Modificar bases de datos#
Al finalizar la exploración de una base de datos procedemos a modificarla. En este tutorial expandimos la explicación de los métodos de la librería pandas
vistos anteriormente y presentamos métodos adicionales para integrarlos en procesos de modificación de bases de datos.
Requisitos#
Para desarrollar este tutorial necesitarás:
Importar archivos de texto.
Implementar filtrado condicional y filtrado numérico.
Utilizar los métodos básicos de los
Series
y losDataFrame
.
Objetivos#
Al final de este tutorial podrás:
1. Procesar archivos en formatos especiales.
2. Modificar la estructura y el contenido de un DataFrame
.
1. Procesamiento de archivos en formatos especiales#
La librería pandas
nos permite importar archivos en múltiples formatos para procesarlos como un DataFrame
. Entre estos formatos, se encuentran los archivos de tipo texto, de tipo binario y de tipo SQL. En las referencias encuentras la lista completa de métodos de lectura y escritura según el tipo de archivo. A manera de ejemplo expondremos el método read_csv
el cual permite procesar archivos separados por un caracter.
pd.read_csv(filepath_or_buffer, sep, **kwds)
filepath_or_buffer: ruta del archivo de texto a procesar.
sep: Caracter que separa las observaciones. Default = “,”.
** kwds: indica que podemos especificar otros parámetros disponibles en el método
read_csv
.
Ejemplo 1#
El archivo "mfh.csv"
(Major foreign holders) contiene la distribución del monto de títulos del tesoro americano de los Estados Unidos que se encuentra en cuentas extranjeras. Dado que este es un archivo csv, utilizaremos el código que aprendimos anteriormente para cargarlo en nuestro notebook.
Importemos las librerías necesarias.
import numpy as np
import pandas as pd
#Cargamos el archivo y usamos las dos primeras filas como encabezado
#y la primera columna como índice
mfh = pd.read_csv('Archivos/mfh.csv', header = [0,1], index_col = 0)
#Retiramos la primera y las dos últimas filas
mfh = mfh[1:-2]
mfh
Sep | Aug | Jul | Jun | May | Apr | Mar | Feb | Jan | Dec | Nov | Oct | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
Country | 2020 | 2020 | 2020 | 2020 | 2020 | 2020 | 2020 | 2020 | 2020 | 2019 | 2019 | 2019 |
Japan | 1276.2 | 1278.4 | 1293.0 | 1261.5 | 1260.4 | 1266.5 | 1272.6 | 1268.6 | 1211.8 | 1155.2 | 1160.6 | 1168.5 |
China, Mainland | 1061.7 | 1068.0 | 1073.4 | 1074.4 | 1083.7 | 1072.8 | 1081.6 | 1092.3 | 1078.6 | 1069.9 | 1089.1 | 1101.5 |
United Kingdom | 428.9 | 419.9 | 424.7 | 445.6 | 445.8 | 429.2 | 469.7 | 477.1 | 450.3 | 392.1 | 400.5 | 412.7 |
Ireland | 315.8 | 335.3 | 330.8 | 330.3 | 324.2 | 301.3 | 271.6 | 282.8 | 271.7 | 281.9 | 289.7 | 285.4 |
Brazil | 265.1 | 265.0 | 265.7 | 264.1 | 264.4 | 259.5 | 264.4 | 285.9 | 283.3 | 281.8 | 293.3 | 298.5 |
Luxembourg | 262.5 | 268.8 | 264.7 | 267.6 | 262.7 | 265.5 | 246.1 | 260.8 | 255.2 | 254.6 | 261.9 | 263.0 |
Switzerland | 255.3 | 253.1 | 250.7 | 247.4 | 243.1 | 241.3 | 244.6 | 243.7 | 238.1 | 237.5 | 233.4 | 233.2 |
Hong Kong | 245.5 | 250.9 | 267.1 | 266.4 | 269.0 | 259.4 | 256.0 | 268.4 | 253.0 | 249.7 | 249.7 | 243.6 |
Cayman Islands | 231.6 | 228.9 | 222.3 | 224.0 | 216.7 | 213.0 | 209.4 | 228.2 | 225.1 | 238.2 | 234.2 | 236.8 |
Belgium | 218.1 | 215.0 | 211.9 | 218.7 | 212.1 | 210.2 | 206.1 | 218.0 | 206.5 | 207.4 | 202.4 | 205.6 |
Taiwan | 213.5 | 212.0 | 209.7 | 204.6 | 199.2 | 201.7 | 205.0 | 201.9 | 199.2 | 193.1 | 188.6 | 191.2 |
India | 213.5 | 196.5 | 194.6 | 182.7 | 169.9 | 157.4 | 156.5 | 177.5 | 164.3 | 162.0 | 159.2 | 161.4 |
Singapore | 159.0 | 160.3 | 158.6 | 150.5 | 142.1 | 146.1 | 151.5 | 165.4 | 160.7 | 147.9 | 150.6 | 138.8 |
France | 135.4 | 133.6 | 130.3 | 144.2 | 130.5 | 137.7 | 156.0 | 147.6 | 134.0 | 127.7 | 123.0 | 133.4 |
Saudi Arabia | 131.2 | 130.0 | 124.6 | 124.9 | 123.5 | 125.3 | 159.1 | 184.4 | 182.9 | 179.8 | 179.7 | 178.9 |
Canada | 128.0 | 131.0 | 133.9 | 127.5 | 129.9 | 136.3 | 131.5 | 148.3 | 157.9 | 143.3 | 155.2 | 157.1 |
Korea | 123.2 | 122.7 | 123.1 | 122.7 | 117.3 | 120.0 | 110.8 | 116.1 | 121.1 | 121.9 | 117.2 | 117.1 |
Norway | 91.3 | 91.4 | 90.6 | 89.5 | 87.6 | 93.2 | 98.0 | 103.3 | 97.7 | 90.1 | 96.0 | 100.3 |
Thailand | 83.2 | 85.7 | 87.9 | 85.5 | 85.8 | 80.5 | 81.8 | 91.3 | 96.0 | 90.5 | 91.2 | 95.2 |
Germany | 74.8 | 78.9 | 78.3 | 79.5 | 80.6 | 77.7 | 77.3 | 86.0 | 83.7 | 78.3 | 79.9 | 84.0 |
Bermuda | 73.6 | 70.9 | 66.6 | 66.8 | 63.9 | 65.5 | 64.2 | 65.9 | 64.8 | 71.3 | 68.2 | 65.4 |
Netherlands | 69.2 | 68.5 | 71.2 | 69.4 | 67.9 | 66.2 | 69.1 | 70.9 | 67.7 | 65.1 | 62.2 | 61.7 |
Israel | 51.5 | 47.7 | 48.4 | 47.6 | 46.8 | 43.2 | 41.1 | 45.1 | 45.6 | 43.1 | 45.6 | 45.4 |
Mexico | 49.2 | 49.5 | 47.6 | 47.0 | 47.4 | 45.4 | 40.9 | 47.5 | 45.8 | 45.3 | 49.1 | 49.1 |
Philippines | 46.7 | 47.6 | 43.8 | 44.2 | 42.7 | 42.7 | 43.1 | 41.8 | 40.4 | 34.8 | 37.4 | 34.6 |
Kuwait | 46.6 | 46.4 | 47.9 | 44.9 | 43.6 | 44.5 | 40.1 | 43.6 | 41.9 | 43.3 | 43.0 | 43.8 |
Poland | 44.1 | 43.8 | 42.5 | 39.7 | 38.0 | 34.4 | 35.6 | 38.8 | 37.7 | 38.8 | 38.5 | 35.7 |
Italy | 44.0 | 43.5 | 42.6 | 42.4 | 41.4 | 41.5 | 44.8 | 46.8 | 44.6 | 45.3 | 45.7 | 47.1 |
Spain | 41.3 | 41.3 | 41.9 | 44.0 | 47.3 | 44.0 | 43.8 | 46.2 | 43.9 | 50.4 | 44.4 | 45.6 |
Australia | 38.3 | 41.6 | 42.8 | 41.9 | 43.5 | 44.8 | 46.3 | 43.7 | 45.1 | 41.8 | 44.6 | 45.4 |
Sweden | 38.2 | 38.3 | 40.0 | 39.1 | 37.1 | 36.5 | 39.5 | 45.4 | 45.0 | 48.7 | 49.5 | 46.9 |
United Arab Emirates | 33.1 | 36.6 | 29.5 | 26.1 | 27.9 | 26.3 | 28.0 | 37.3 | 39.8 | 40.7 | 39.9 | 38.4 |
Vietnam | 30.4 | 30.1 | 29.9 | 30.3 | 30.3 | 29.6 | 30.7 | 31.0 | 30.3 | 30.5 | 29.9 | 29.2 |
Al observar el DataFrame
de la celda anterior nos damos cuenta que sería deseable rotular correctamente los niveles de las columnas y el índice, para esto podemos usar el método rename_axis
:
mfh = mfh.rename_axis("Pais")
mfh = mfh.rename_axis(["Mes","Año"], axis = 1)
mfh
Mes | Sep | Aug | Jul | Jun | May | Apr | Mar | Feb | Jan | Dec | Nov | Oct |
---|---|---|---|---|---|---|---|---|---|---|---|---|
Año | 2020 | 2020 | 2020 | 2020 | 2020 | 2020 | 2020 | 2020 | 2020 | 2019 | 2019 | 2019 |
Pais | ||||||||||||
Japan | 1276.2 | 1278.4 | 1293.0 | 1261.5 | 1260.4 | 1266.5 | 1272.6 | 1268.6 | 1211.8 | 1155.2 | 1160.6 | 1168.5 |
China, Mainland | 1061.7 | 1068.0 | 1073.4 | 1074.4 | 1083.7 | 1072.8 | 1081.6 | 1092.3 | 1078.6 | 1069.9 | 1089.1 | 1101.5 |
United Kingdom | 428.9 | 419.9 | 424.7 | 445.6 | 445.8 | 429.2 | 469.7 | 477.1 | 450.3 | 392.1 | 400.5 | 412.7 |
Ireland | 315.8 | 335.3 | 330.8 | 330.3 | 324.2 | 301.3 | 271.6 | 282.8 | 271.7 | 281.9 | 289.7 | 285.4 |
Brazil | 265.1 | 265.0 | 265.7 | 264.1 | 264.4 | 259.5 | 264.4 | 285.9 | 283.3 | 281.8 | 293.3 | 298.5 |
Luxembourg | 262.5 | 268.8 | 264.7 | 267.6 | 262.7 | 265.5 | 246.1 | 260.8 | 255.2 | 254.6 | 261.9 | 263.0 |
Switzerland | 255.3 | 253.1 | 250.7 | 247.4 | 243.1 | 241.3 | 244.6 | 243.7 | 238.1 | 237.5 | 233.4 | 233.2 |
Hong Kong | 245.5 | 250.9 | 267.1 | 266.4 | 269.0 | 259.4 | 256.0 | 268.4 | 253.0 | 249.7 | 249.7 | 243.6 |
Cayman Islands | 231.6 | 228.9 | 222.3 | 224.0 | 216.7 | 213.0 | 209.4 | 228.2 | 225.1 | 238.2 | 234.2 | 236.8 |
Belgium | 218.1 | 215.0 | 211.9 | 218.7 | 212.1 | 210.2 | 206.1 | 218.0 | 206.5 | 207.4 | 202.4 | 205.6 |
Taiwan | 213.5 | 212.0 | 209.7 | 204.6 | 199.2 | 201.7 | 205.0 | 201.9 | 199.2 | 193.1 | 188.6 | 191.2 |
India | 213.5 | 196.5 | 194.6 | 182.7 | 169.9 | 157.4 | 156.5 | 177.5 | 164.3 | 162.0 | 159.2 | 161.4 |
Singapore | 159.0 | 160.3 | 158.6 | 150.5 | 142.1 | 146.1 | 151.5 | 165.4 | 160.7 | 147.9 | 150.6 | 138.8 |
France | 135.4 | 133.6 | 130.3 | 144.2 | 130.5 | 137.7 | 156.0 | 147.6 | 134.0 | 127.7 | 123.0 | 133.4 |
Saudi Arabia | 131.2 | 130.0 | 124.6 | 124.9 | 123.5 | 125.3 | 159.1 | 184.4 | 182.9 | 179.8 | 179.7 | 178.9 |
Canada | 128.0 | 131.0 | 133.9 | 127.5 | 129.9 | 136.3 | 131.5 | 148.3 | 157.9 | 143.3 | 155.2 | 157.1 |
Korea | 123.2 | 122.7 | 123.1 | 122.7 | 117.3 | 120.0 | 110.8 | 116.1 | 121.1 | 121.9 | 117.2 | 117.1 |
Norway | 91.3 | 91.4 | 90.6 | 89.5 | 87.6 | 93.2 | 98.0 | 103.3 | 97.7 | 90.1 | 96.0 | 100.3 |
Thailand | 83.2 | 85.7 | 87.9 | 85.5 | 85.8 | 80.5 | 81.8 | 91.3 | 96.0 | 90.5 | 91.2 | 95.2 |
Germany | 74.8 | 78.9 | 78.3 | 79.5 | 80.6 | 77.7 | 77.3 | 86.0 | 83.7 | 78.3 | 79.9 | 84.0 |
Bermuda | 73.6 | 70.9 | 66.6 | 66.8 | 63.9 | 65.5 | 64.2 | 65.9 | 64.8 | 71.3 | 68.2 | 65.4 |
Netherlands | 69.2 | 68.5 | 71.2 | 69.4 | 67.9 | 66.2 | 69.1 | 70.9 | 67.7 | 65.1 | 62.2 | 61.7 |
Israel | 51.5 | 47.7 | 48.4 | 47.6 | 46.8 | 43.2 | 41.1 | 45.1 | 45.6 | 43.1 | 45.6 | 45.4 |
Mexico | 49.2 | 49.5 | 47.6 | 47.0 | 47.4 | 45.4 | 40.9 | 47.5 | 45.8 | 45.3 | 49.1 | 49.1 |
Philippines | 46.7 | 47.6 | 43.8 | 44.2 | 42.7 | 42.7 | 43.1 | 41.8 | 40.4 | 34.8 | 37.4 | 34.6 |
Kuwait | 46.6 | 46.4 | 47.9 | 44.9 | 43.6 | 44.5 | 40.1 | 43.6 | 41.9 | 43.3 | 43.0 | 43.8 |
Poland | 44.1 | 43.8 | 42.5 | 39.7 | 38.0 | 34.4 | 35.6 | 38.8 | 37.7 | 38.8 | 38.5 | 35.7 |
Italy | 44.0 | 43.5 | 42.6 | 42.4 | 41.4 | 41.5 | 44.8 | 46.8 | 44.6 | 45.3 | 45.7 | 47.1 |
Spain | 41.3 | 41.3 | 41.9 | 44.0 | 47.3 | 44.0 | 43.8 | 46.2 | 43.9 | 50.4 | 44.4 | 45.6 |
Australia | 38.3 | 41.6 | 42.8 | 41.9 | 43.5 | 44.8 | 46.3 | 43.7 | 45.1 | 41.8 | 44.6 | 45.4 |
Sweden | 38.2 | 38.3 | 40.0 | 39.1 | 37.1 | 36.5 | 39.5 | 45.4 | 45.0 | 48.7 | 49.5 | 46.9 |
United Arab Emirates | 33.1 | 36.6 | 29.5 | 26.1 | 27.9 | 26.3 | 28.0 | 37.3 | 39.8 | 40.7 | 39.9 | 38.4 |
Vietnam | 30.4 | 30.1 | 29.9 | 30.3 | 30.3 | 29.6 | 30.7 | 31.0 | 30.3 | 30.5 | 29.9 | 29.2 |
2. Métodos para la modificación de bases de datos#
2.1. Método set_index
#
Permite utilizar una o varias columnas para sustituir o modificar el índice de un DataFrame
. Además de columnas podemos utilizar arreglos de pandas
(Series
e Index
) o de arreglos de numpy
.
pandas.DataFrame.set_index(keys, drop, append, inplace, verify_integrity)
keys: indica la(s) llave(s) a usar como nuevo índice.
drop: elimina del
DataFrame
las columnas que se emplearon como llaves en el método. Por defecto esTrue
.append: preseva el índice original de la base de datos y le agrega la llave ingresada por parámetro. Por defecto es
False
.inplace: por defecto es
False
.inplace = True
: retornaNone
y ejecuta las operaciones sobre el dataframe oríginal.inplace = False
: retorna una copia delDataFrame
con las modificaciones.
verify_integrity: solo aplica si ignore_index = False. Por defecto,
verify_integrity = False
.verify_integrity = True
: arroja ValueError si en el DataFrame resultante hay indices duplicados.verify_integrity = False
: permite tener índices repetidos en el DataFrame resultante.
Nota: si utilizamos un arreglo externo al DataFrame
, debemos asegurarnos que tenga el mismo tamaño que el que tiene actualmente el DataFrame
.
Ejemplo 2#
Requerimos analizar como se distribuye la tenencia de los títulos del tesoros entre dos grupos de países: los países miembros de la OECD y los países llamados paraísos fiscales. Ambos grupos no son mutuamente excluyentes por lo que pueden haber coincidencias entre ambos. A continuación, se encuentra declarada una lista para cada grupo de países.
lista_paraisos_fiscales = ["Belgium", "Ireland", "Luxembourg", "Malta", "Netherlands", "Cayman Island",
"Singapore", "Puerto Rico", "Hong Kong", "Switzerland"]
lista_oecd = ["Austria", "Australia", "Belgium", "Canada", "Chile", "Colombia", "Czech Republic", "Denmark",
"Estonia", "Finland", "France", "Germany", "Greece", "Hungary", "Iceland", "Ireland", "Israel",
"Italy", "Japan", "Korea", "Latvia", "Lithuania", "Luxembourg", "Mexico", "Netherlands",
"New Zealand", "Norway", "Poland", "Portugal", "Slovak Republic", "Slovenia", "Spain", "Sweden",
"Switzerland", "Turkey", "United Kingdom", "United States"]
Creamos las columnas correspondientes para posteriormente añadirlas al índice.
# Creamos las columnas "Clasificación Fiscal" y "OECD"
mfh.loc[:,'Clasificación_Fiscal'] = "Tributación Regular"
mfh.loc[:,'OECD'] = "No pertenece"
# Definimos cuales países son considerados paraísos fiscales y cuáles son miembros de la OECD
mfh.loc[mfh.index.isin(lista_paraisos_fiscales), 'Clasificación_Fiscal'] = "Paraiso Fiscal"
mfh.loc[mfh.index.isin(lista_oecd), 'OECD'] = "Pertenece"
# Utilizamos set_index para añadir estas columnas al índice
mfh.set_index(keys =['Clasificación_Fiscal','OECD'], append = True, inplace = True)
mfh
Mes | Sep | Aug | Jul | Jun | May | Apr | Mar | Feb | Jan | Dec | Nov | Oct | ||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Año | 2020 | 2020 | 2020 | 2020 | 2020 | 2020 | 2020 | 2020 | 2020 | 2019 | 2019 | 2019 | ||
Pais | Clasificación_Fiscal | OECD | ||||||||||||
Japan | Tributación Regular | Pertenece | 1276.2 | 1278.4 | 1293.0 | 1261.5 | 1260.4 | 1266.5 | 1272.6 | 1268.6 | 1211.8 | 1155.2 | 1160.6 | 1168.5 |
China, Mainland | Tributación Regular | No pertenece | 1061.7 | 1068.0 | 1073.4 | 1074.4 | 1083.7 | 1072.8 | 1081.6 | 1092.3 | 1078.6 | 1069.9 | 1089.1 | 1101.5 |
United Kingdom | Tributación Regular | Pertenece | 428.9 | 419.9 | 424.7 | 445.6 | 445.8 | 429.2 | 469.7 | 477.1 | 450.3 | 392.1 | 400.5 | 412.7 |
Ireland | Paraiso Fiscal | Pertenece | 315.8 | 335.3 | 330.8 | 330.3 | 324.2 | 301.3 | 271.6 | 282.8 | 271.7 | 281.9 | 289.7 | 285.4 |
Brazil | Tributación Regular | No pertenece | 265.1 | 265.0 | 265.7 | 264.1 | 264.4 | 259.5 | 264.4 | 285.9 | 283.3 | 281.8 | 293.3 | 298.5 |
Luxembourg | Paraiso Fiscal | Pertenece | 262.5 | 268.8 | 264.7 | 267.6 | 262.7 | 265.5 | 246.1 | 260.8 | 255.2 | 254.6 | 261.9 | 263.0 |
Switzerland | Paraiso Fiscal | Pertenece | 255.3 | 253.1 | 250.7 | 247.4 | 243.1 | 241.3 | 244.6 | 243.7 | 238.1 | 237.5 | 233.4 | 233.2 |
Hong Kong | Paraiso Fiscal | No pertenece | 245.5 | 250.9 | 267.1 | 266.4 | 269.0 | 259.4 | 256.0 | 268.4 | 253.0 | 249.7 | 249.7 | 243.6 |
Cayman Islands | Tributación Regular | No pertenece | 231.6 | 228.9 | 222.3 | 224.0 | 216.7 | 213.0 | 209.4 | 228.2 | 225.1 | 238.2 | 234.2 | 236.8 |
Belgium | Paraiso Fiscal | Pertenece | 218.1 | 215.0 | 211.9 | 218.7 | 212.1 | 210.2 | 206.1 | 218.0 | 206.5 | 207.4 | 202.4 | 205.6 |
Taiwan | Tributación Regular | No pertenece | 213.5 | 212.0 | 209.7 | 204.6 | 199.2 | 201.7 | 205.0 | 201.9 | 199.2 | 193.1 | 188.6 | 191.2 |
India | Tributación Regular | No pertenece | 213.5 | 196.5 | 194.6 | 182.7 | 169.9 | 157.4 | 156.5 | 177.5 | 164.3 | 162.0 | 159.2 | 161.4 |
Singapore | Paraiso Fiscal | No pertenece | 159.0 | 160.3 | 158.6 | 150.5 | 142.1 | 146.1 | 151.5 | 165.4 | 160.7 | 147.9 | 150.6 | 138.8 |
France | Tributación Regular | Pertenece | 135.4 | 133.6 | 130.3 | 144.2 | 130.5 | 137.7 | 156.0 | 147.6 | 134.0 | 127.7 | 123.0 | 133.4 |
Saudi Arabia | Tributación Regular | No pertenece | 131.2 | 130.0 | 124.6 | 124.9 | 123.5 | 125.3 | 159.1 | 184.4 | 182.9 | 179.8 | 179.7 | 178.9 |
Canada | Tributación Regular | Pertenece | 128.0 | 131.0 | 133.9 | 127.5 | 129.9 | 136.3 | 131.5 | 148.3 | 157.9 | 143.3 | 155.2 | 157.1 |
Korea | Tributación Regular | Pertenece | 123.2 | 122.7 | 123.1 | 122.7 | 117.3 | 120.0 | 110.8 | 116.1 | 121.1 | 121.9 | 117.2 | 117.1 |
Norway | Tributación Regular | Pertenece | 91.3 | 91.4 | 90.6 | 89.5 | 87.6 | 93.2 | 98.0 | 103.3 | 97.7 | 90.1 | 96.0 | 100.3 |
Thailand | Tributación Regular | No pertenece | 83.2 | 85.7 | 87.9 | 85.5 | 85.8 | 80.5 | 81.8 | 91.3 | 96.0 | 90.5 | 91.2 | 95.2 |
Germany | Tributación Regular | Pertenece | 74.8 | 78.9 | 78.3 | 79.5 | 80.6 | 77.7 | 77.3 | 86.0 | 83.7 | 78.3 | 79.9 | 84.0 |
Bermuda | Tributación Regular | No pertenece | 73.6 | 70.9 | 66.6 | 66.8 | 63.9 | 65.5 | 64.2 | 65.9 | 64.8 | 71.3 | 68.2 | 65.4 |
Netherlands | Paraiso Fiscal | Pertenece | 69.2 | 68.5 | 71.2 | 69.4 | 67.9 | 66.2 | 69.1 | 70.9 | 67.7 | 65.1 | 62.2 | 61.7 |
Israel | Tributación Regular | Pertenece | 51.5 | 47.7 | 48.4 | 47.6 | 46.8 | 43.2 | 41.1 | 45.1 | 45.6 | 43.1 | 45.6 | 45.4 |
Mexico | Tributación Regular | Pertenece | 49.2 | 49.5 | 47.6 | 47.0 | 47.4 | 45.4 | 40.9 | 47.5 | 45.8 | 45.3 | 49.1 | 49.1 |
Philippines | Tributación Regular | No pertenece | 46.7 | 47.6 | 43.8 | 44.2 | 42.7 | 42.7 | 43.1 | 41.8 | 40.4 | 34.8 | 37.4 | 34.6 |
Kuwait | Tributación Regular | No pertenece | 46.6 | 46.4 | 47.9 | 44.9 | 43.6 | 44.5 | 40.1 | 43.6 | 41.9 | 43.3 | 43.0 | 43.8 |
Poland | Tributación Regular | Pertenece | 44.1 | 43.8 | 42.5 | 39.7 | 38.0 | 34.4 | 35.6 | 38.8 | 37.7 | 38.8 | 38.5 | 35.7 |
Italy | Tributación Regular | Pertenece | 44.0 | 43.5 | 42.6 | 42.4 | 41.4 | 41.5 | 44.8 | 46.8 | 44.6 | 45.3 | 45.7 | 47.1 |
Spain | Tributación Regular | Pertenece | 41.3 | 41.3 | 41.9 | 44.0 | 47.3 | 44.0 | 43.8 | 46.2 | 43.9 | 50.4 | 44.4 | 45.6 |
Australia | Tributación Regular | Pertenece | 38.3 | 41.6 | 42.8 | 41.9 | 43.5 | 44.8 | 46.3 | 43.7 | 45.1 | 41.8 | 44.6 | 45.4 |
Sweden | Tributación Regular | Pertenece | 38.2 | 38.3 | 40.0 | 39.1 | 37.1 | 36.5 | 39.5 | 45.4 | 45.0 | 48.7 | 49.5 | 46.9 |
United Arab Emirates | Tributación Regular | No pertenece | 33.1 | 36.6 | 29.5 | 26.1 | 27.9 | 26.3 | 28.0 | 37.3 | 39.8 | 40.7 | 39.9 | 38.4 |
Vietnam | Tributación Regular | No pertenece | 30.4 | 30.1 | 29.9 | 30.3 | 30.3 | 29.6 | 30.7 | 31.0 | 30.3 | 30.5 | 29.9 | 29.2 |
2.2. Método reset_index
#
Resetea el índice de un DataFrame
. Si se trata de un multi-índice permite eliminar uno o más niveles, dejando la opción de preservarlos como columnas.
pandas.DataFrame.reset_index(level, drop)
level: etiqueta o índice del multi-índice a eliminar.
drop: por defecto es
False
Drop = True
: se eliminan los niveles.
Drop = False
: los niveles pasan a ser una columna.
2.3. Método drop
#
Permite eliminar filas o columnas especificando su nombre o su índice.
pandas.DataFrame.drop(labels, axis, index, columns, level, inplace, errors)
labels: indica el nombre o la posición de las filas o columnas a eliminar.
axis: por defecto es 0.
axis = 1
: indica que vamos a eliminar columnas.axis = 0
: indica que vamos a eliminar filas.
index: se utiliza únicamente para eliminar filas, especificando el nombre o el índice de las filas a eliminar. Cuando utilizamos este parámetro no es necesario utilizar los parámetros
labels
yaxis
.columns: se utiliza únicamente para eliminar columnas, especificando el nombre o el índice de las columnas a eliminar. Cuando utilizamos este parámetro no es necesario utilizar los parámetros
labels
yaxis
.level: indica por nombre o por posición a cuál de los niveles del índice múltiple se le aplicará el método.
inplace: por defecto es
False
.inplace = True
: retornaNone
y ejecuta las operaciones sobre el dataframe oríginal.inplace = False
: retorna una copia delDataFrame
con las modificaciones.
Ejemplo 3#
Requerimos eliminar las observaciones del DataFrame
mfh
correspondientes al año 2020, y almacenar el DataFrame
resultante en un DataFrame
llamado mfh_2021
.
Procedemos entonces utilizando el método drop
.
mfh_2021 = mfh.drop(labels = '2020', axis = 1, level = 1 )
mfh_2021
Mes | Dec | Nov | Oct | ||
---|---|---|---|---|---|
Año | 2019 | 2019 | 2019 | ||
Pais | Clasificación_Fiscal | OECD | |||
Japan | Tributación Regular | Pertenece | 1155.2 | 1160.6 | 1168.5 |
China, Mainland | Tributación Regular | No pertenece | 1069.9 | 1089.1 | 1101.5 |
United Kingdom | Tributación Regular | Pertenece | 392.1 | 400.5 | 412.7 |
Ireland | Paraiso Fiscal | Pertenece | 281.9 | 289.7 | 285.4 |
Brazil | Tributación Regular | No pertenece | 281.8 | 293.3 | 298.5 |
Luxembourg | Paraiso Fiscal | Pertenece | 254.6 | 261.9 | 263.0 |
Switzerland | Paraiso Fiscal | Pertenece | 237.5 | 233.4 | 233.2 |
Hong Kong | Paraiso Fiscal | No pertenece | 249.7 | 249.7 | 243.6 |
Cayman Islands | Tributación Regular | No pertenece | 238.2 | 234.2 | 236.8 |
Belgium | Paraiso Fiscal | Pertenece | 207.4 | 202.4 | 205.6 |
Taiwan | Tributación Regular | No pertenece | 193.1 | 188.6 | 191.2 |
India | Tributación Regular | No pertenece | 162.0 | 159.2 | 161.4 |
Singapore | Paraiso Fiscal | No pertenece | 147.9 | 150.6 | 138.8 |
France | Tributación Regular | Pertenece | 127.7 | 123.0 | 133.4 |
Saudi Arabia | Tributación Regular | No pertenece | 179.8 | 179.7 | 178.9 |
Canada | Tributación Regular | Pertenece | 143.3 | 155.2 | 157.1 |
Korea | Tributación Regular | Pertenece | 121.9 | 117.2 | 117.1 |
Norway | Tributación Regular | Pertenece | 90.1 | 96.0 | 100.3 |
Thailand | Tributación Regular | No pertenece | 90.5 | 91.2 | 95.2 |
Germany | Tributación Regular | Pertenece | 78.3 | 79.9 | 84.0 |
Bermuda | Tributación Regular | No pertenece | 71.3 | 68.2 | 65.4 |
Netherlands | Paraiso Fiscal | Pertenece | 65.1 | 62.2 | 61.7 |
Israel | Tributación Regular | Pertenece | 43.1 | 45.6 | 45.4 |
Mexico | Tributación Regular | Pertenece | 45.3 | 49.1 | 49.1 |
Philippines | Tributación Regular | No pertenece | 34.8 | 37.4 | 34.6 |
Kuwait | Tributación Regular | No pertenece | 43.3 | 43.0 | 43.8 |
Poland | Tributación Regular | Pertenece | 38.8 | 38.5 | 35.7 |
Italy | Tributación Regular | Pertenece | 45.3 | 45.7 | 47.1 |
Spain | Tributación Regular | Pertenece | 50.4 | 44.4 | 45.6 |
Australia | Tributación Regular | Pertenece | 41.8 | 44.6 | 45.4 |
Sweden | Tributación Regular | Pertenece | 48.7 | 49.5 | 46.9 |
United Arab Emirates | Tributación Regular | No pertenece | 40.7 | 39.9 | 38.4 |
Vietnam | Tributación Regular | No pertenece | 30.5 | 29.9 | 29.2 |
2.4. Método Groupby
#
El método groupby permite realizar las siguientes tres operaciones a la vez:
Separar en grupos el
DataFrame
de acuerdo a un criterio.Aplicar una función a cada grupo.
Combinar los resultados en un nuevo
DataFrame
.
La sintaxis para usar groupby es la siguiente:
pandas.DataFrame.groupby(by, axis, level)
by: indica el criterio para realizar el paso (1). Puede usarse un diccionario, un
Series
, entre otros.axis: por defecto es 0.
axis = 1
: indica que vamos a agrupar columnas.axis = 0
: indica que vamos a agrupar filas.
level: indica por nombre o por posición a cuál de los niveles del índice múltiple se le aplicará el método.
Ejemplo 4#
Requerimos un DataFrame
llamado mfh_resumen
que sume el total de títulos del tesoro para los niveles del índice múltiple.
Transformamos los valores de nuestro DataFrame
a float
y después aplicamos el método groupby
.
mfh = mfh.astype(float)
mfh_resumen = mfh.groupby(level = ['Clasificación_Fiscal','OECD']).sum()
mfh_resumen
Mes | Sep | Aug | Jul | Jun | May | Apr | Mar | Feb | Jan | Dec | Nov | Oct | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Año | 2020 | 2020 | 2020 | 2020 | 2020 | 2020 | 2020 | 2020 | 2020 | 2019 | 2019 | 2019 | |
Clasificación_Fiscal | OECD | ||||||||||||
Paraiso Fiscal | No pertenece | 404.5 | 411.2 | 425.7 | 416.9 | 411.1 | 405.5 | 407.5 | 433.8 | 413.7 | 397.6 | 400.3 | 382.4 |
Pertenece | 1120.9 | 1140.7 | 1129.3 | 1133.4 | 1110.0 | 1084.5 | 1037.5 | 1076.2 | 1039.2 | 1046.5 | 1049.6 | 1048.9 | |
Tributación Regular | No pertenece | 2430.2 | 2417.7 | 2395.9 | 2372.5 | 2351.6 | 2318.8 | 2363.9 | 2481.1 | 2446.6 | 2435.9 | 2453.7 | 2474.9 |
Pertenece | 2564.4 | 2561.6 | 2579.7 | 2572.2 | 2553.6 | 2550.4 | 2607.9 | 2660.5 | 2564.2 | 2422.0 | 2449.8 | 2488.3 |
2.5. Método apply
#
El método apply
lleva a cabo una función bien sea sobre las columnas o sobre las filas de un DataFrame
.
pandas.DataFrame.apply(func, axis)
func: función a aplicar.
axis: por defecto es 0.
axis = 1
: indica que vamos a aplicar la función sobre las columnas.axis = 0
: indica que vamos a aplicar la función sobre las filas.
A continuación explicaremos tres ventajas que presenta el método apply
:
Trabajar con funciones declaradas previamente#
El parámetro func
puede tomar el valor de una función declarada previamente.
Ejemplo 5#
Requerimos calcular el porcentaje de títulos distribuidos en las cuentas de los países clasificados como paraíso fiscal y guardar este resultado en un DataFrame
llamado mfh_paraisos_fiscales
.
Para esto declaramos la función calcular_porcentaje
.
def calcular_porcentaje(lista):
rta = lista / sum(lista)
return rta
Después la usamos como parámetro del método apply
.
# Declaramos el Segmentador de Índices
idx = pd.IndexSlice
#creamos un dataframe auxiliar con todos los paraísos fiscales
mfh_paraisos_fiscales = mfh.loc[idx[:,'Paraiso Fiscal',],]
#Aplicamos a cada fila la función que calcula su % de participación de acuerdo con la suma de su columna.
mfh_paraisos_fiscales = mfh_paraisos_fiscales.apply(calcular_porcentaje)
mfh_paraisos_fiscales
Mes | Sep | Aug | Jul | Jun | May | Apr | Mar | Feb | Jan | Dec | Nov | Oct | ||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Año | 2020 | 2020 | 2020 | 2020 | 2020 | 2020 | 2020 | 2020 | 2020 | 2019 | 2019 | 2019 | ||
Pais | Clasificación_Fiscal | OECD | ||||||||||||
Ireland | Paraiso Fiscal | Pertenece | 0.207028 | 0.216058 | 0.212733 | 0.213056 | 0.213135 | 0.202215 | 0.187958 | 0.187285 | 0.187005 | 0.195208 | 0.199807 | 0.199399 |
Luxembourg | Paraiso Fiscal | Pertenece | 0.172086 | 0.173207 | 0.170225 | 0.172612 | 0.172704 | 0.178188 | 0.170311 | 0.172715 | 0.175649 | 0.176304 | 0.180633 | 0.183749 |
Switzerland | Paraiso Fiscal | Pertenece | 0.167366 | 0.163090 | 0.161222 | 0.159582 | 0.159819 | 0.161946 | 0.169273 | 0.161391 | 0.163879 | 0.164462 | 0.160977 | 0.162929 |
Hong Kong | Paraiso Fiscal | No pertenece | 0.160941 | 0.161673 | 0.171768 | 0.171838 | 0.176846 | 0.174094 | 0.177163 | 0.177748 | 0.174134 | 0.172910 | 0.172219 | 0.170195 |
Belgium | Paraiso Fiscal | Pertenece | 0.142979 | 0.138540 | 0.136270 | 0.141069 | 0.139439 | 0.141074 | 0.142630 | 0.144371 | 0.142130 | 0.143619 | 0.139596 | 0.143646 |
Singapore | Paraiso Fiscal | No pertenece | 0.104235 | 0.103293 | 0.101994 | 0.097078 | 0.093419 | 0.098054 | 0.104844 | 0.109536 | 0.110606 | 0.102417 | 0.103869 | 0.096975 |
Netherlands | Paraiso Fiscal | Pertenece | 0.045365 | 0.044139 | 0.045788 | 0.044766 | 0.044639 | 0.044430 | 0.047820 | 0.046954 | 0.046596 | 0.045080 | 0.042900 | 0.043108 |
Encadenar métodos#
En pandas
podemos encadenar métodos, esto significa que se puede invocar un método tras otro sin redefinir el DataFrame
repetidamente. El método apply
puede encadenarse con otros métodos, lo que resulta práctico en términos de ahorro de líneas de código y claridad de lectura.
Ejemplo 6#
Filtra la base para solo trabajar con aquellos países que son parte de la OECD, de tal forma que pueda calcular el porcentaje de títulos bajo posesión de cada país.
Hacemos entonces el filtrado y directamente realizamos el apply
.
mfh_oecd = mfh.loc[idx[:,:,'Pertenece'],].apply(calcular_porcentaje,axis = 0)
mfh_oecd
Mes | Sep | Aug | Jul | Jun | May | Apr | Mar | Feb | Jan | Dec | Nov | Oct | ||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Año | 2020 | 2020 | 2020 | 2020 | 2020 | 2020 | 2020 | 2020 | 2020 | 2019 | 2019 | 2019 | ||
Pais | Clasificación_Fiscal | OECD | ||||||||||||
Japan | Tributación Regular | Pertenece | 0.346295 | 0.345299 | 0.348611 | 0.340431 | 0.344033 | 0.348428 | 0.349097 | 0.339497 | 0.336294 | 0.333055 | 0.331657 | 0.330346 |
United Kingdom | Tributación Regular | Pertenece | 0.116381 | 0.113416 | 0.114505 | 0.120250 | 0.121684 | 0.118078 | 0.128847 | 0.127680 | 0.124965 | 0.113046 | 0.114448 | 0.116674 |
Ireland | Paraiso Fiscal | Pertenece | 0.085692 | 0.090565 | 0.089188 | 0.089135 | 0.088492 | 0.082891 | 0.074505 | 0.075682 | 0.075401 | 0.081274 | 0.082786 | 0.080685 |
Luxembourg | Paraiso Fiscal | Pertenece | 0.071229 | 0.072604 | 0.071367 | 0.072215 | 0.071705 | 0.073042 | 0.067510 | 0.069794 | 0.070822 | 0.073403 | 0.074841 | 0.074353 |
Switzerland | Paraiso Fiscal | Pertenece | 0.069275 | 0.068363 | 0.067592 | 0.066764 | 0.066355 | 0.066384 | 0.067098 | 0.065218 | 0.066076 | 0.068473 | 0.066697 | 0.065928 |
Belgium | Paraiso Fiscal | Pertenece | 0.059181 | 0.058072 | 0.057131 | 0.059019 | 0.057894 | 0.057828 | 0.056537 | 0.058340 | 0.057307 | 0.059795 | 0.057838 | 0.058125 |
France | Tributación Regular | Pertenece | 0.036741 | 0.036086 | 0.035131 | 0.038914 | 0.035621 | 0.037883 | 0.042794 | 0.039500 | 0.037187 | 0.036817 | 0.035149 | 0.037713 |
Canada | Tributación Regular | Pertenece | 0.034733 | 0.035383 | 0.036101 | 0.034407 | 0.035457 | 0.037498 | 0.036073 | 0.039687 | 0.043820 | 0.041315 | 0.044350 | 0.044414 |
Korea | Tributación Regular | Pertenece | 0.033430 | 0.033142 | 0.033190 | 0.033112 | 0.032018 | 0.033013 | 0.030394 | 0.031070 | 0.033607 | 0.035145 | 0.033491 | 0.033105 |
Norway | Tributación Regular | Pertenece | 0.024774 | 0.024687 | 0.024427 | 0.024153 | 0.023911 | 0.025640 | 0.026883 | 0.027645 | 0.027113 | 0.025977 | 0.027433 | 0.028356 |
Germany | Tributación Regular | Pertenece | 0.020297 | 0.021311 | 0.021111 | 0.021454 | 0.022000 | 0.021376 | 0.021205 | 0.023015 | 0.023228 | 0.022575 | 0.022832 | 0.023748 |
Netherlands | Paraiso Fiscal | Pertenece | 0.018777 | 0.018502 | 0.019197 | 0.018728 | 0.018534 | 0.018212 | 0.018955 | 0.018974 | 0.018788 | 0.018769 | 0.017774 | 0.017443 |
Israel | Tributación Regular | Pertenece | 0.013974 | 0.012884 | 0.013049 | 0.012845 | 0.012774 | 0.011885 | 0.011274 | 0.012069 | 0.012655 | 0.012426 | 0.013031 | 0.012835 |
Mexico | Tributación Regular | Pertenece | 0.013350 | 0.013370 | 0.012834 | 0.012684 | 0.012938 | 0.012490 | 0.011220 | 0.012712 | 0.012710 | 0.013060 | 0.014031 | 0.013881 |
Poland | Tributación Regular | Pertenece | 0.011966 | 0.011830 | 0.011459 | 0.010714 | 0.010372 | 0.009464 | 0.009766 | 0.010383 | 0.010462 | 0.011186 | 0.011002 | 0.010093 |
Italy | Tributación Regular | Pertenece | 0.011939 | 0.011749 | 0.011486 | 0.011442 | 0.011300 | 0.011417 | 0.012289 | 0.012524 | 0.012377 | 0.013060 | 0.013059 | 0.013316 |
Spain | Tributación Regular | Pertenece | 0.011207 | 0.011155 | 0.011297 | 0.011874 | 0.012911 | 0.012105 | 0.012015 | 0.012364 | 0.012183 | 0.014531 | 0.012688 | 0.012892 |
Australia | Tributación Regular | Pertenece | 0.010393 | 0.011236 | 0.011539 | 0.011307 | 0.011874 | 0.012325 | 0.012701 | 0.011695 | 0.012516 | 0.012051 | 0.012745 | 0.012835 |
Sweden | Tributación Regular | Pertenece | 0.010366 | 0.010345 | 0.010785 | 0.010552 | 0.010127 | 0.010042 | 0.010836 | 0.012150 | 0.012488 | 0.014041 | 0.014145 | 0.013259 |
Múltiples operaciones simultaneamente#
El método apply
permite ejecutar varias operaciones a la vez, lo cual nos ahorra líneas de código o encadenar más métodos de los necesarios.
Ejemplo 7#
Requerimos nuevamente filtrar la base para solo trabajar con aquellos países que son parte de la OECD, de tal forma que calculemos el porcentaje de títulos bajo posesión de cada país. Esta vez, redondearemos el resultado a tres cifras decimales.
Una manera de solucionar este requerimiento es utilizar la división de objetos y el método round
de pandas
.
mfh_oecd = mfh.loc[idx[:,:,'Pertenece'],]
mfh_oecd_norm = (mfh_oecd / mfh_oecd.sum()).round(3)
mfh_oecd_norm
Mes | Sep | Aug | Jul | Jun | May | Apr | Mar | Feb | Jan | Dec | Nov | Oct | ||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Año | 2020 | 2020 | 2020 | 2020 | 2020 | 2020 | 2020 | 2020 | 2020 | 2019 | 2019 | 2019 | ||
Pais | Clasificación_Fiscal | OECD | ||||||||||||
Japan | Tributación Regular | Pertenece | 0.346 | 0.345 | 0.349 | 0.340 | 0.344 | 0.348 | 0.349 | 0.339 | 0.336 | 0.333 | 0.332 | 0.330 |
United Kingdom | Tributación Regular | Pertenece | 0.116 | 0.113 | 0.115 | 0.120 | 0.122 | 0.118 | 0.129 | 0.128 | 0.125 | 0.113 | 0.114 | 0.117 |
Ireland | Paraiso Fiscal | Pertenece | 0.086 | 0.091 | 0.089 | 0.089 | 0.088 | 0.083 | 0.075 | 0.076 | 0.075 | 0.081 | 0.083 | 0.081 |
Luxembourg | Paraiso Fiscal | Pertenece | 0.071 | 0.073 | 0.071 | 0.072 | 0.072 | 0.073 | 0.068 | 0.070 | 0.071 | 0.073 | 0.075 | 0.074 |
Switzerland | Paraiso Fiscal | Pertenece | 0.069 | 0.068 | 0.068 | 0.067 | 0.066 | 0.066 | 0.067 | 0.065 | 0.066 | 0.068 | 0.067 | 0.066 |
Belgium | Paraiso Fiscal | Pertenece | 0.059 | 0.058 | 0.057 | 0.059 | 0.058 | 0.058 | 0.057 | 0.058 | 0.057 | 0.060 | 0.058 | 0.058 |
France | Tributación Regular | Pertenece | 0.037 | 0.036 | 0.035 | 0.039 | 0.036 | 0.038 | 0.043 | 0.040 | 0.037 | 0.037 | 0.035 | 0.038 |
Canada | Tributación Regular | Pertenece | 0.035 | 0.035 | 0.036 | 0.034 | 0.035 | 0.037 | 0.036 | 0.040 | 0.044 | 0.041 | 0.044 | 0.044 |
Korea | Tributación Regular | Pertenece | 0.033 | 0.033 | 0.033 | 0.033 | 0.032 | 0.033 | 0.030 | 0.031 | 0.034 | 0.035 | 0.033 | 0.033 |
Norway | Tributación Regular | Pertenece | 0.025 | 0.025 | 0.024 | 0.024 | 0.024 | 0.026 | 0.027 | 0.028 | 0.027 | 0.026 | 0.027 | 0.028 |
Germany | Tributación Regular | Pertenece | 0.020 | 0.021 | 0.021 | 0.021 | 0.022 | 0.021 | 0.021 | 0.023 | 0.023 | 0.023 | 0.023 | 0.024 |
Netherlands | Paraiso Fiscal | Pertenece | 0.019 | 0.019 | 0.019 | 0.019 | 0.019 | 0.018 | 0.019 | 0.019 | 0.019 | 0.019 | 0.018 | 0.017 |
Israel | Tributación Regular | Pertenece | 0.014 | 0.013 | 0.013 | 0.013 | 0.013 | 0.012 | 0.011 | 0.012 | 0.013 | 0.012 | 0.013 | 0.013 |
Mexico | Tributación Regular | Pertenece | 0.013 | 0.013 | 0.013 | 0.013 | 0.013 | 0.012 | 0.011 | 0.013 | 0.013 | 0.013 | 0.014 | 0.014 |
Poland | Tributación Regular | Pertenece | 0.012 | 0.012 | 0.011 | 0.011 | 0.010 | 0.009 | 0.010 | 0.010 | 0.010 | 0.011 | 0.011 | 0.010 |
Italy | Tributación Regular | Pertenece | 0.012 | 0.012 | 0.011 | 0.011 | 0.011 | 0.011 | 0.012 | 0.013 | 0.012 | 0.013 | 0.013 | 0.013 |
Spain | Tributación Regular | Pertenece | 0.011 | 0.011 | 0.011 | 0.012 | 0.013 | 0.012 | 0.012 | 0.012 | 0.012 | 0.015 | 0.013 | 0.013 |
Australia | Tributación Regular | Pertenece | 0.010 | 0.011 | 0.012 | 0.011 | 0.012 | 0.012 | 0.013 | 0.012 | 0.013 | 0.012 | 0.013 | 0.013 |
Sweden | Tributación Regular | Pertenece | 0.010 | 0.010 | 0.011 | 0.011 | 0.010 | 0.010 | 0.011 | 0.012 | 0.012 | 0.014 | 0.014 | 0.013 |
En cambio podríamos haber usado una sola línea de código para cubrir este requerimiento.
mfh_oecd_norm = mfh.loc[idx[:,:,'Pertenece'],].apply(lambda x: round(x / x.sum(),3))
mfh_oecd_norm
Mes | Sep | Aug | Jul | Jun | May | Apr | Mar | Feb | Jan | Dec | Nov | Oct | ||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Año | 2020 | 2020 | 2020 | 2020 | 2020 | 2020 | 2020 | 2020 | 2020 | 2019 | 2019 | 2019 | ||
Pais | Clasificación_Fiscal | OECD | ||||||||||||
Japan | Tributación Regular | Pertenece | 0.346 | 0.345 | 0.349 | 0.340 | 0.344 | 0.348 | 0.349 | 0.339 | 0.336 | 0.333 | 0.332 | 0.330 |
United Kingdom | Tributación Regular | Pertenece | 0.116 | 0.113 | 0.115 | 0.120 | 0.122 | 0.118 | 0.129 | 0.128 | 0.125 | 0.113 | 0.114 | 0.117 |
Ireland | Paraiso Fiscal | Pertenece | 0.086 | 0.091 | 0.089 | 0.089 | 0.088 | 0.083 | 0.075 | 0.076 | 0.075 | 0.081 | 0.083 | 0.081 |
Luxembourg | Paraiso Fiscal | Pertenece | 0.071 | 0.073 | 0.071 | 0.072 | 0.072 | 0.073 | 0.068 | 0.070 | 0.071 | 0.073 | 0.075 | 0.074 |
Switzerland | Paraiso Fiscal | Pertenece | 0.069 | 0.068 | 0.068 | 0.067 | 0.066 | 0.066 | 0.067 | 0.065 | 0.066 | 0.068 | 0.067 | 0.066 |
Belgium | Paraiso Fiscal | Pertenece | 0.059 | 0.058 | 0.057 | 0.059 | 0.058 | 0.058 | 0.057 | 0.058 | 0.057 | 0.060 | 0.058 | 0.058 |
France | Tributación Regular | Pertenece | 0.037 | 0.036 | 0.035 | 0.039 | 0.036 | 0.038 | 0.043 | 0.040 | 0.037 | 0.037 | 0.035 | 0.038 |
Canada | Tributación Regular | Pertenece | 0.035 | 0.035 | 0.036 | 0.034 | 0.035 | 0.037 | 0.036 | 0.040 | 0.044 | 0.041 | 0.044 | 0.044 |
Korea | Tributación Regular | Pertenece | 0.033 | 0.033 | 0.033 | 0.033 | 0.032 | 0.033 | 0.030 | 0.031 | 0.034 | 0.035 | 0.033 | 0.033 |
Norway | Tributación Regular | Pertenece | 0.025 | 0.025 | 0.024 | 0.024 | 0.024 | 0.026 | 0.027 | 0.028 | 0.027 | 0.026 | 0.027 | 0.028 |
Germany | Tributación Regular | Pertenece | 0.020 | 0.021 | 0.021 | 0.021 | 0.022 | 0.021 | 0.021 | 0.023 | 0.023 | 0.023 | 0.023 | 0.024 |
Netherlands | Paraiso Fiscal | Pertenece | 0.019 | 0.019 | 0.019 | 0.019 | 0.019 | 0.018 | 0.019 | 0.019 | 0.019 | 0.019 | 0.018 | 0.017 |
Israel | Tributación Regular | Pertenece | 0.014 | 0.013 | 0.013 | 0.013 | 0.013 | 0.012 | 0.011 | 0.012 | 0.013 | 0.012 | 0.013 | 0.013 |
Mexico | Tributación Regular | Pertenece | 0.013 | 0.013 | 0.013 | 0.013 | 0.013 | 0.012 | 0.011 | 0.013 | 0.013 | 0.013 | 0.014 | 0.014 |
Poland | Tributación Regular | Pertenece | 0.012 | 0.012 | 0.011 | 0.011 | 0.010 | 0.009 | 0.010 | 0.010 | 0.010 | 0.011 | 0.011 | 0.010 |
Italy | Tributación Regular | Pertenece | 0.012 | 0.012 | 0.011 | 0.011 | 0.011 | 0.011 | 0.012 | 0.013 | 0.012 | 0.013 | 0.013 | 0.013 |
Spain | Tributación Regular | Pertenece | 0.011 | 0.011 | 0.011 | 0.012 | 0.013 | 0.012 | 0.012 | 0.012 | 0.012 | 0.015 | 0.013 | 0.013 |
Australia | Tributación Regular | Pertenece | 0.010 | 0.011 | 0.012 | 0.011 | 0.012 | 0.012 | 0.013 | 0.012 | 0.013 | 0.012 | 0.013 | 0.013 |
Sweden | Tributación Regular | Pertenece | 0.010 | 0.010 | 0.011 | 0.011 | 0.010 | 0.010 | 0.011 | 0.012 | 0.012 | 0.014 | 0.014 | 0.013 |
2.7. Método rename
#
El método rename
sirve para renombrar columnas o índices.
pandas.DataFrame.rename(mapper, index, columns, axis, inplace, level)
mapper: diccionario o función para renombrar las columnas o índices.
index: diccionario o función para renombrar índices. Cuando utilizamos este parámetro no es necesario utilizar los parámetros
mapper
yaxis
.columns: diccionario o función para renombrar columnas. Cuando utilizamos este parámetro no es necesario utilizar los parámetros
mapper
yaxis
.axis: por defecto es 0.
axis = 1
: indica que vamos a renombrar columnas.axis = 0
: indica que vamos a renombrar filas.
inplace: por defecto es
False
.inplace = True
: retornaNone
y ejecuta las operaciones sobre el dataframe oríginal.inplace = False
: retorna una copia delDataFrame
con las modificaciones.
level: indica por nombre o por posición a cuál de los niveles del índice múltiple se le debe aplicar el diccionario o la función.
Ejemplo 8#
En la siguiente celda encuentras un diccionario con los nombres de los países en inglés y en español.
df_paises = pd.read_csv("Archivos/DiccionarioPaises.csv", encoding = 'utf-8-sig', sep = ";", index_col = [1])
dicc_paises = df_paises.to_dict()['País en español']
A continuación encuentras un diccionario con las abreviaturas de los meses en inglés y en español.
dicc_meses = {'Jan':'ENE', 'Feb': 'FEB', 'Mar':'MAR', 'Apr':'ABR', 'May':'MAY' ,'Jun': 'JUN', 'Jul':'JUL',
'Aug': 'AGO', 'Sep': 'SEP', 'Oct':'OCT','Nov':'NOV', 'Dec':'DIC'}
Requerimos traducir al español los meses y países del DataFrame
utilizando los diccionarios provistos
mfh = mfh.rename(mapper = dicc_paises)
mfh = mfh.rename(columns = dicc_meses)
mfh
Mes | SEP | AGO | JUL | JUN | MAY | ABR | MAR | FEB | ENE | DIC | NOV | OCT | ||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Año | 2020 | 2020 | 2020 | 2020 | 2020 | 2020 | 2020 | 2020 | 2020 | 2019 | 2019 | 2019 | ||
Pais | Clasificación_Fiscal | OECD | ||||||||||||
Japón | Tributación Regular | Pertenece | 1276.2 | 1278.4 | 1293.0 | 1261.5 | 1260.4 | 1266.5 | 1272.6 | 1268.6 | 1211.8 | 1155.2 | 1160.6 | 1168.5 |
China | Tributación Regular | No pertenece | 1061.7 | 1068.0 | 1073.4 | 1074.4 | 1083.7 | 1072.8 | 1081.6 | 1092.3 | 1078.6 | 1069.9 | 1089.1 | 1101.5 |
Reino Unido | Tributación Regular | Pertenece | 428.9 | 419.9 | 424.7 | 445.6 | 445.8 | 429.2 | 469.7 | 477.1 | 450.3 | 392.1 | 400.5 | 412.7 |
Irlanda | Paraiso Fiscal | Pertenece | 315.8 | 335.3 | 330.8 | 330.3 | 324.2 | 301.3 | 271.6 | 282.8 | 271.7 | 281.9 | 289.7 | 285.4 |
Brasil | Tributación Regular | No pertenece | 265.1 | 265.0 | 265.7 | 264.1 | 264.4 | 259.5 | 264.4 | 285.9 | 283.3 | 281.8 | 293.3 | 298.5 |
Luxemburgo | Paraiso Fiscal | Pertenece | 262.5 | 268.8 | 264.7 | 267.6 | 262.7 | 265.5 | 246.1 | 260.8 | 255.2 | 254.6 | 261.9 | 263.0 |
Suiza | Paraiso Fiscal | Pertenece | 255.3 | 253.1 | 250.7 | 247.4 | 243.1 | 241.3 | 244.6 | 243.7 | 238.1 | 237.5 | 233.4 | 233.2 |
Hong kong | Paraiso Fiscal | No pertenece | 245.5 | 250.9 | 267.1 | 266.4 | 269.0 | 259.4 | 256.0 | 268.4 | 253.0 | 249.7 | 249.7 | 243.6 |
Islas Caimán | Tributación Regular | No pertenece | 231.6 | 228.9 | 222.3 | 224.0 | 216.7 | 213.0 | 209.4 | 228.2 | 225.1 | 238.2 | 234.2 | 236.8 |
Bélgica | Paraiso Fiscal | Pertenece | 218.1 | 215.0 | 211.9 | 218.7 | 212.1 | 210.2 | 206.1 | 218.0 | 206.5 | 207.4 | 202.4 | 205.6 |
Taiwán | Tributación Regular | No pertenece | 213.5 | 212.0 | 209.7 | 204.6 | 199.2 | 201.7 | 205.0 | 201.9 | 199.2 | 193.1 | 188.6 | 191.2 |
La India | Tributación Regular | No pertenece | 213.5 | 196.5 | 194.6 | 182.7 | 169.9 | 157.4 | 156.5 | 177.5 | 164.3 | 162.0 | 159.2 | 161.4 |
Singapur | Paraiso Fiscal | No pertenece | 159.0 | 160.3 | 158.6 | 150.5 | 142.1 | 146.1 | 151.5 | 165.4 | 160.7 | 147.9 | 150.6 | 138.8 |
Francia | Tributación Regular | Pertenece | 135.4 | 133.6 | 130.3 | 144.2 | 130.5 | 137.7 | 156.0 | 147.6 | 134.0 | 127.7 | 123.0 | 133.4 |
Arabia Saudí | Tributación Regular | No pertenece | 131.2 | 130.0 | 124.6 | 124.9 | 123.5 | 125.3 | 159.1 | 184.4 | 182.9 | 179.8 | 179.7 | 178.9 |
Canadá | Tributación Regular | Pertenece | 128.0 | 131.0 | 133.9 | 127.5 | 129.9 | 136.3 | 131.5 | 148.3 | 157.9 | 143.3 | 155.2 | 157.1 |
Corea del Sur | Tributación Regular | Pertenece | 123.2 | 122.7 | 123.1 | 122.7 | 117.3 | 120.0 | 110.8 | 116.1 | 121.1 | 121.9 | 117.2 | 117.1 |
Noruega | Tributación Regular | Pertenece | 91.3 | 91.4 | 90.6 | 89.5 | 87.6 | 93.2 | 98.0 | 103.3 | 97.7 | 90.1 | 96.0 | 100.3 |
Tailandia | Tributación Regular | No pertenece | 83.2 | 85.7 | 87.9 | 85.5 | 85.8 | 80.5 | 81.8 | 91.3 | 96.0 | 90.5 | 91.2 | 95.2 |
Alemania | Tributación Regular | Pertenece | 74.8 | 78.9 | 78.3 | 79.5 | 80.6 | 77.7 | 77.3 | 86.0 | 83.7 | 78.3 | 79.9 | 84.0 |
Bermudas | Tributación Regular | No pertenece | 73.6 | 70.9 | 66.6 | 66.8 | 63.9 | 65.5 | 64.2 | 65.9 | 64.8 | 71.3 | 68.2 | 65.4 |
Países Bajos | Paraiso Fiscal | Pertenece | 69.2 | 68.5 | 71.2 | 69.4 | 67.9 | 66.2 | 69.1 | 70.9 | 67.7 | 65.1 | 62.2 | 61.7 |
Israel | Tributación Regular | Pertenece | 51.5 | 47.7 | 48.4 | 47.6 | 46.8 | 43.2 | 41.1 | 45.1 | 45.6 | 43.1 | 45.6 | 45.4 |
México | Tributación Regular | Pertenece | 49.2 | 49.5 | 47.6 | 47.0 | 47.4 | 45.4 | 40.9 | 47.5 | 45.8 | 45.3 | 49.1 | 49.1 |
Filipinas | Tributación Regular | No pertenece | 46.7 | 47.6 | 43.8 | 44.2 | 42.7 | 42.7 | 43.1 | 41.8 | 40.4 | 34.8 | 37.4 | 34.6 |
Kuwait | Tributación Regular | No pertenece | 46.6 | 46.4 | 47.9 | 44.9 | 43.6 | 44.5 | 40.1 | 43.6 | 41.9 | 43.3 | 43.0 | 43.8 |
Polonia | Tributación Regular | Pertenece | 44.1 | 43.8 | 42.5 | 39.7 | 38.0 | 34.4 | 35.6 | 38.8 | 37.7 | 38.8 | 38.5 | 35.7 |
Italia | Tributación Regular | Pertenece | 44.0 | 43.5 | 42.6 | 42.4 | 41.4 | 41.5 | 44.8 | 46.8 | 44.6 | 45.3 | 45.7 | 47.1 |
España | Tributación Regular | Pertenece | 41.3 | 41.3 | 41.9 | 44.0 | 47.3 | 44.0 | 43.8 | 46.2 | 43.9 | 50.4 | 44.4 | 45.6 |
Australia | Tributación Regular | Pertenece | 38.3 | 41.6 | 42.8 | 41.9 | 43.5 | 44.8 | 46.3 | 43.7 | 45.1 | 41.8 | 44.6 | 45.4 |
Suecia | Tributación Regular | Pertenece | 38.2 | 38.3 | 40.0 | 39.1 | 37.1 | 36.5 | 39.5 | 45.4 | 45.0 | 48.7 | 49.5 | 46.9 |
Emiratos Árabes Unidos (EAU) | Tributación Regular | No pertenece | 33.1 | 36.6 | 29.5 | 26.1 | 27.9 | 26.3 | 28.0 | 37.3 | 39.8 | 40.7 | 39.9 | 38.4 |
Vietnam | Tributación Regular | No pertenece | 30.4 | 30.1 | 29.9 | 30.3 | 30.3 | 29.6 | 30.7 | 31.0 | 30.3 | 30.5 | 29.9 | 29.2 |
2.8. Método replace
#
El método replace
usa la siguiente sintaxis para reemplazar un valor por otro.
pandas.DataFrame.replace( to_replace, value, inplace)
to_replace: valor específico, estructura de datos.
value: valor que sustituirá el valor a reemplazar.
inplace: por defecto es
False
.inplace = True
: retornaNone
y ejecuta las operaciones sobre el dataframe oríginal.inplace = False
: retorna una copia delDataFrame
con las modificaciones.
2.9. Método stack
#
El método stack
transfiere uno o varios niveles de las columnas al índice. Al emplearlo, el número de niveles del índice se va a ver aumentando y el número de niveles de las columnas se va a ver disminuido.
pandas.DataFrame.stack(level, fill_value)
level: nombre o índice del nivel a transferir. Por defecto es -1 (el último nivel).
fill_value: valor para reemplazar los datos faltantes que se generen.
Ejemplo 9#
Pasa el nivel correspondiente a los meses al índice de mfh_2021
.
Procedemos entonces usando el método stack
.
mfh_2021 = mfh_2021.stack("Mes")
mfh_2021
Año | 2019 | |||
---|---|---|---|---|
Pais | Clasificación_Fiscal | OECD | Mes | |
Japan | Tributación Regular | Pertenece | Dec | 1155.2 |
Nov | 1160.6 | |||
Oct | 1168.5 | |||
China, Mainland | Tributación Regular | No pertenece | Dec | 1069.9 |
Nov | 1089.1 | |||
... | ... | ... | ... | ... |
United Arab Emirates | Tributación Regular | No pertenece | Nov | 39.9 |
Oct | 38.4 | |||
Vietnam | Tributación Regular | No pertenece | Dec | 30.5 |
Nov | 29.9 | |||
Oct | 29.2 |
99 rows × 1 columns
2.10. Método unstack
#
El método unstack
transfiere uno o varios niveles del índice a las columna. Al emplearlo, el número de niveles de las columnas se va a ver aumentando y el número de niveles del índice se va a ver disminuido.
pandas.DataFrame.unstack(level, fill_value)
level: nombre o índice del nivel a transferir. Por defecto es -1 (el último nivel).
fill_value: valor para reemplazar los datos faltantes que se generen.
Ejemplo 10#
Se te solicita revertir el cambio realizado en el ejemplo anterior.
Utilizamos el método unstack
para revertir el cambio realizado.
mfh_2021 = mfh_2021.unstack("Mes")
mfh_2021
Año | 2019 | ||||
---|---|---|---|---|---|
Mes | Dec | Nov | Oct | ||
Pais | Clasificación_Fiscal | OECD | |||
Australia | Tributación Regular | Pertenece | 41.8 | 44.6 | 45.4 |
Belgium | Paraiso Fiscal | Pertenece | 207.4 | 202.4 | 205.6 |
Bermuda | Tributación Regular | No pertenece | 71.3 | 68.2 | 65.4 |
Brazil | Tributación Regular | No pertenece | 281.8 | 293.3 | 298.5 |
Canada | Tributación Regular | Pertenece | 143.3 | 155.2 | 157.1 |
Cayman Islands | Tributación Regular | No pertenece | 238.2 | 234.2 | 236.8 |
China, Mainland | Tributación Regular | No pertenece | 1069.9 | 1089.1 | 1101.5 |
France | Tributación Regular | Pertenece | 127.7 | 123.0 | 133.4 |
Germany | Tributación Regular | Pertenece | 78.3 | 79.9 | 84.0 |
Hong Kong | Paraiso Fiscal | No pertenece | 249.7 | 249.7 | 243.6 |
India | Tributación Regular | No pertenece | 162.0 | 159.2 | 161.4 |
Ireland | Paraiso Fiscal | Pertenece | 281.9 | 289.7 | 285.4 |
Israel | Tributación Regular | Pertenece | 43.1 | 45.6 | 45.4 |
Italy | Tributación Regular | Pertenece | 45.3 | 45.7 | 47.1 |
Japan | Tributación Regular | Pertenece | 1155.2 | 1160.6 | 1168.5 |
Korea | Tributación Regular | Pertenece | 121.9 | 117.2 | 117.1 |
Kuwait | Tributación Regular | No pertenece | 43.3 | 43.0 | 43.8 |
Luxembourg | Paraiso Fiscal | Pertenece | 254.6 | 261.9 | 263.0 |
Mexico | Tributación Regular | Pertenece | 45.3 | 49.1 | 49.1 |
Netherlands | Paraiso Fiscal | Pertenece | 65.1 | 62.2 | 61.7 |
Norway | Tributación Regular | Pertenece | 90.1 | 96.0 | 100.3 |
Philippines | Tributación Regular | No pertenece | 34.8 | 37.4 | 34.6 |
Poland | Tributación Regular | Pertenece | 38.8 | 38.5 | 35.7 |
Saudi Arabia | Tributación Regular | No pertenece | 179.8 | 179.7 | 178.9 |
Singapore | Paraiso Fiscal | No pertenece | 147.9 | 150.6 | 138.8 |
Spain | Tributación Regular | Pertenece | 50.4 | 44.4 | 45.6 |
Sweden | Tributación Regular | Pertenece | 48.7 | 49.5 | 46.9 |
Switzerland | Paraiso Fiscal | Pertenece | 237.5 | 233.4 | 233.2 |
Taiwan | Tributación Regular | No pertenece | 193.1 | 188.6 | 191.2 |
Thailand | Tributación Regular | No pertenece | 90.5 | 91.2 | 95.2 |
United Arab Emirates | Tributación Regular | No pertenece | 40.7 | 39.9 | 38.4 |
United Kingdom | Tributación Regular | Pertenece | 392.1 | 400.5 | 412.7 |
Vietnam | Tributación Regular | No pertenece | 30.5 | 29.9 | 29.2 |
Módulo Opcional - Archivos de ancho fijo#
Con pandas podemos usar la función read_fwf
para leer archivos de ancho fijo
pd.read_fwf(filepath_or_buffer, colspecs, **kwds)
filepath_or_buffer: ruta del archivo de texto a procesar.
colspecs: lista de tuplas que identifica la posición donde empieza y termina cada columna. Especificando
colspecs = 'infer'
el método infiere las columnas del archivo.** kwds: indica que podemos especificar los parámetros disponibles en el método
read_csv
.
Vamos a usar el archivo "mfh.txt"
(Major foreign holders) Dado que este es un archivo de ancho fijo, utilizaremos el código que aprendimos anteriormente para cargarlo en nuestro notebook usando la función read_fwf
with open("Archivos/mfh.txt", "r") as mfh:
# Leemos el archivo y lo almacenamos en una sola cadena de caracteres
mfh = mfh.read()
# Seleccionamos la cadena de caracteres que se encuentra entre la palabra 'Period' y la palabra 'Grand'
mfh = mfh.split('PERIOD')[1].split('Grand')[0]
# Declaramos una lista con las líneas de nuestra cadena de caracteres
lista_mfh = mfh.splitlines()
# Nos quedamos únicamente con las líneas no vacías
lista_mfh = [x for x in lista_mfh if x]
Declaramos las siguientes variables:
# Lista vacía para almacenar las posiciones de inicio de cada columna de números.
lista_inicio_cols = []
# Lista vacía para almacenar la última posición de cada columna de números.
lista_fin_cols = []
# Cadena de caracteres que almacena la fila de guiones contenida en el archivo.
fila_guiones = lista_mfh[2]
# Variable de tipo entero para marcar el inicio de la busqueda a partir de cada columna.
inicio_columna = 0
# Variable de tipo lógica para indicar si ya llegamos al final de la lista.
criterio_parada = True
Iteramos mientras el booleano se mantenga igual a True
.
while(criterio_parada):
# Declaramos el inicio de una nueva columna encontrando la palabra guión.
pos_inicio = inicio_columna + fila_guiones[inicio_columna:].find('-')
# Declaramos el ancho de la columna encontrando el siguiente espacio vacío.
ancho_columna = fila_guiones[pos_inicio:].find(' ')
# Si encuentra dicho espacio
if(ancho_columna != -1):
# Almacenamos la posición de inicio de la columna.
lista_inicio_cols.append(pos_inicio)
# Declaramos la posición final de la columna.
pos_final = pos_inicio + ancho_columna
# Almacenamos la posición final de la columna.
lista_fin_cols.append(pos_final)
# Actualizamos el inicio de la columna para la siguiente iteración.
inicio_columna = pos_final
#Si no se pudo encontrar mas espacios no se se sigue iterando ya que no hay mas columnas.
else:
criterio_parada = False
El código anterior nos permite obtener las posiciones en las que empiezan y finalizan las columnas de números. Entonces, agreguemos la tupla que contiene la posición donde empieza la columna de países (posición 0) y la posición donde empieza la primera columna de números.
ancho_cols = [(0,lista_inicio_cols[0])]+list(zip(lista_inicio_cols, lista_fin_cols))
ancho_cols
[(0, 32),
(32, 38),
(40, 46),
(48, 54),
(56, 62),
(64, 70),
(72, 78),
(80, 86),
(88, 94),
(96, 102),
(104, 110),
(112, 118),
(120, 126)]
Luego, utilizamos el método read_fwf
para leer el archivo, omitiendo las filas correspondientes al encabezado y al pie de tabla. Además, para efectos de este tutorial debemos omitir los registros correspondientes al gran recuento total ('Grand Total'
) y los demás países ('All other'
).
mfh = pd.read_fwf("Archivos/mfh.txt", skiprows = range(8), skipfooter = 21,
colspecs = ancho_cols, index_col = [0], header = [0,1])
# Eliminamos las dos primeras entradas ya que no contienen información relevante.
mfh = mfh[1:-2]
mfh
Sep | Aug | Jul | Jun | May | Apr | Mar | Feb | Jan | Dec | Nov | Oct | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
Country | 2020 | 2020 | 2020 | 2020 | 2020 | 2020 | 2020 | 2020 | 2020 | 2019 | 2019 | 2019 |
Japan | 1276.2 | 1278.4 | 1293.0 | 1261.5 | 1260.4 | 1266.5 | 1272.6 | 1268.6 | 1211.8 | 1155.2 | 1160.6 | 1168.5 |
China, Mainland | 1061.7 | 1068.0 | 1073.4 | 1074.4 | 1083.7 | 1072.8 | 1081.6 | 1092.3 | 1078.6 | 1069.9 | 1089.1 | 1101.5 |
United Kingdom | 428.9 | 419.9 | 424.7 | 445.6 | 445.8 | 429.2 | 469.7 | 477.1 | 450.3 | 392.1 | 400.5 | 412.7 |
Ireland | 315.8 | 335.3 | 330.8 | 330.3 | 324.2 | 301.3 | 271.6 | 282.8 | 271.7 | 281.9 | 289.7 | 285.4 |
Brazil | 265.1 | 265.0 | 265.7 | 264.1 | 264.4 | 259.5 | 264.4 | 285.9 | 283.3 | 281.8 | 293.3 | 298.5 |
Luxembourg | 262.5 | 268.8 | 264.7 | 267.6 | 262.7 | 265.5 | 246.1 | 260.8 | 255.2 | 254.6 | 261.9 | 263.0 |
Switzerland | 255.3 | 253.1 | 250.7 | 247.4 | 243.1 | 241.3 | 244.6 | 243.7 | 238.1 | 237.5 | 233.4 | 233.2 |
Hong Kong | 245.5 | 250.9 | 267.1 | 266.4 | 269.0 | 259.4 | 256.0 | 268.4 | 253.0 | 249.7 | 249.7 | 243.6 |
Cayman Islands | 231.6 | 228.9 | 222.3 | 224.0 | 216.7 | 213.0 | 209.4 | 228.2 | 225.1 | 238.2 | 234.2 | 236.8 |
Belgium | 218.1 | 215.0 | 211.9 | 218.7 | 212.1 | 210.2 | 206.1 | 218.0 | 206.5 | 207.4 | 202.4 | 205.6 |
Taiwan | 213.5 | 212.0 | 209.7 | 204.6 | 199.2 | 201.7 | 205.0 | 201.9 | 199.2 | 193.1 | 188.6 | 191.2 |
India | 213.5 | 196.5 | 194.6 | 182.7 | 169.9 | 157.4 | 156.5 | 177.5 | 164.3 | 162.0 | 159.2 | 161.4 |
Singapore | 159.0 | 160.3 | 158.6 | 150.5 | 142.1 | 146.1 | 151.5 | 165.4 | 160.7 | 147.9 | 150.6 | 138.8 |
France | 135.4 | 133.6 | 130.3 | 144.2 | 130.5 | 137.7 | 156.0 | 147.6 | 134.0 | 127.7 | 123.0 | 133.4 |
Saudi Arabia | 131.2 | 130.0 | 124.6 | 124.9 | 123.5 | 125.3 | 159.1 | 184.4 | 182.9 | 179.8 | 179.7 | 178.9 |
Canada | 128.0 | 131.0 | 133.9 | 127.5 | 129.9 | 136.3 | 131.5 | 148.3 | 157.9 | 143.3 | 155.2 | 157.1 |
Korea | 123.2 | 122.7 | 123.1 | 122.7 | 117.3 | 120.0 | 110.8 | 116.1 | 121.1 | 121.9 | 117.2 | 117.1 |
Norway | 91.3 | 91.4 | 90.6 | 89.5 | 87.6 | 93.2 | 98.0 | 103.3 | 97.7 | 90.1 | 96.0 | 100.3 |
Thailand | 83.2 | 85.7 | 87.9 | 85.5 | 85.8 | 80.5 | 81.8 | 91.3 | 96.0 | 90.5 | 91.2 | 95.2 |
Germany | 74.8 | 78.9 | 78.3 | 79.5 | 80.6 | 77.7 | 77.3 | 86.0 | 83.7 | 78.3 | 79.9 | 84.0 |
Bermuda | 73.6 | 70.9 | 66.6 | 66.8 | 63.9 | 65.5 | 64.2 | 65.9 | 64.8 | 71.3 | 68.2 | 65.4 |
Netherlands | 69.2 | 68.5 | 71.2 | 69.4 | 67.9 | 66.2 | 69.1 | 70.9 | 67.7 | 65.1 | 62.2 | 61.7 |
Israel | 51.5 | 47.7 | 48.4 | 47.6 | 46.8 | 43.2 | 41.1 | 45.1 | 45.6 | 43.1 | 45.6 | 45.4 |
Mexico | 49.2 | 49.5 | 47.6 | 47.0 | 47.4 | 45.4 | 40.9 | 47.5 | 45.8 | 45.3 | 49.1 | 49.1 |
Philippines | 46.7 | 47.6 | 43.8 | 44.2 | 42.7 | 42.7 | 43.1 | 41.8 | 40.4 | 34.8 | 37.4 | 34.6 |
Kuwait | 46.6 | 46.4 | 47.9 | 44.9 | 43.6 | 44.5 | 40.1 | 43.6 | 41.9 | 43.3 | 43.0 | 43.8 |
Poland | 44.1 | 43.8 | 42.5 | 39.7 | 38.0 | 34.4 | 35.6 | 38.8 | 37.7 | 38.8 | 38.5 | 35.7 |
Italy | 44.0 | 43.5 | 42.6 | 42.4 | 41.4 | 41.5 | 44.8 | 46.8 | 44.6 | 45.3 | 45.7 | 47.1 |
Spain | 41.3 | 41.3 | 41.9 | 44.0 | 47.3 | 44.0 | 43.8 | 46.2 | 43.9 | 50.4 | 44.4 | 45.6 |
Australia | 38.3 | 41.6 | 42.8 | 41.9 | 43.5 | 44.8 | 46.3 | 43.7 | 45.1 | 41.8 | 44.6 | 45.4 |
Sweden | 38.2 | 38.3 | 40.0 | 39.1 | 37.1 | 36.5 | 39.5 | 45.4 | 45.0 | 48.7 | 49.5 | 46.9 |
United Arab Emirates | 33.1 | 36.6 | 29.5 | 26.1 | 27.9 | 26.3 | 28.0 | 37.3 | 39.8 | 40.7 | 39.9 | 38.4 |
Vietnam | 30.4 | 30.1 | 29.9 | 30.3 | 30.3 | 29.6 | 30.7 | 31.0 | 30.3 | 30.5 | 29.9 | 29.2 |
Referencias#
Pandas (2021). Documentación sobre I/O tools (text, CSV, HDF5…). Recuperado el 24 de Abril de 2020 de: https://pandas.pydata.org/pandas-docs/stable/user_guide/io.html
Pandas (2020). Documentación sobre los objetos índices. Recuperado el 15 de mayo de 2020 de: https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.IndexSlice.html
Pandas (2020). Documentación sobre los métodos DataFrame. Recuperado el 15 de mayo de 2020 de: https://pandas.pydata.org/docs/reference/frame.html
Departamento del Tesoro Americano (2020). Principales tenedores foráneos de títulos del tesoro [Base de Datos]. Recuperado el 15 de septiembre de 2020 de : https://ticdata.treasury.gov/Publish/mfh.txt.
Créditos#
Autores: Jorge Esteban Camargo Forero, Alejandro Mantilla Redondo, Diego Alejandro Cely Gómez
Fecha Última actualización: 14/08/2023