Contenido del curso
Extracción de datos
Transformación de datos
Carga de datos
- 12

Consideraciones clave antes de cargar a Redshift
03:31 min - 13

Configuración de clúster en AWS Redshift
04:59 min - 14

Crear tablas en AWS Redshift
02:45 min - 15

Carga de CSV a Redshift con COPY
14:03 min - 16

Estructurar sentence para carga de datos de S3 a Redshift
01:14 min - 17

Carga masiva de CSVs a Redshift con Python
08:07 min
ETL con Pentaho
Conclusión
Merge de países y productos con pandas
Resumen
Relacionar tablas en un proceso ETL es una de las habilidades más útiles cuando trabajas con datos comerciales. Aquí vas a aprender cómo hacer un merge en pandas usando left join, cómo asignar un identificador único a cada registro y cómo enriquecer un DataFrame de transacciones con información de países y productos.
Por qué necesitas un identificador único en cada DataFrame
Antes de cruzar tablas, cada registro debe tener una llave que lo distinga. Sin esa llave, los cruces se rompen y los análisis pierden sentido.
En el DataFrame de códigos de producto, el identificador se crea tomando el índice propio del DataFrame y sumándole uno para que no arranque en cero:
python df_codes['id_code'] = df_codes.index + 1
Este paso parece menor, pero es la columna que después vas a usar para conectar las transacciones con su categoría real.
Cómo convertir una columna a tipo numérico con astype
El campo clean_code necesita ser entero para cruzarse correctamente con la columna code del DataFrame de transacciones. La conversión se hace con astype(int64):
python df_codes['clean_code'] = df_codes['clean_code'].astype('int64')
Así garantizas que ambos lados del merge compartan el mismo tipo de dato y evitas errores silenciosos.
¿Qué hace astype en pandas? Convierte una columna a un tipo de dato específico. Por ejemplo,
astype('int64')transforma valores en enteros de 64 bits, útil cuando un código viene como texto y necesitas operarlo como número.
Cómo limpiar el DataFrame de países antes del merge
El DataFrame df_countries trae mucha información: nombre del país, URLs de imágenes, código de dos dígitos, código alpha 3, región y subregión. Para el cruce solo necesitas lo esencial.
La selección queda así:
alpha 3, que es la columna con la que vas a cruzar.country, el nombre del país.regionysubregion, para enriquecer el análisis posterior.
Después filtras los registros donde alpha 3 no sea nulo, porque sin esa llave el cruce no funciona. Y aplicas la misma lógica del identificador único, ahora bajo el nombre id_country.
Qué columnas conviene conservar para análisis posteriores
Mantener región y subregión te permite agrupar transacciones por bloques geográficos sin tener que volver a la fuente original. Cada columna que conservas debe tener un propósito claro en el análisis que viene después.
Cómo aplicar un left join con pandas merge
El merge es la operación que une dos DataFrames a partir de una columna común. En este caso, partes desde df_trades y le agregas la información de códigos:
python df_trades_clean = df_trades.merge( df_codes[['clean_code', 'id_code']], how='left', left_on='code', right_on='clean_code' )
La elección de how='left' es clave: garantiza que ningún registro de transacciones se pierda, aunque no encuentre coincidencia en el catálogo de códigos.
¿Qué es un left join en pandas? Es un tipo de unión que conserva todos los registros del DataFrame izquierdo y solo agrega la información del derecho cuando hay coincidencia. Si no la hay, el resultado queda con valores nulos en esas columnas.
La operación se repite para los países, cambiando los parámetros:
df_countries[['alpha 3', 'id_country']]como DataFrame derecho.left_on='country_code'para la columna de transacciones.right_on='alpha 3'para la columna del catálogo de países.
El resultado es un DataFrame de transacciones con dos nuevos identificadores: uno apunta al producto y otro al país.
Cuándo usar left_on y right_on en lugar de on
Usas left_on y right_on cuando las columnas que vas a cruzar tienen nombres distintos en cada DataFrame. Si se llamaran igual, bastaría con on='nombre_columna'. Aquí, como code y clean_code no coinciden, necesitas especificar ambos lados.
¿Cuál es la diferencia entre merge y join en pandas?
mergees más flexible y trabaja sobre columnas con nombres distintos usandoleft_onyright_on.joinopera principalmente sobre el índice del DataFrame y es más limitado.
Por qué este proceso enriquece tu base de datos de transacciones
Después del cruce, cada transacción de importación o exportación queda conectada con dos catálogos enriquecidos. Por un lado, el de productos te da el nombre del código y la categoría a la que pertenece. Por el otro, el de países te entrega nombre, región y subregión.
Esto cambia por completo lo que puedes hacer en la siguiente etapa. Ya no analizas códigos sueltos, sino transacciones con contexto geográfico y de categoría. Y todo se resuelve con consultas simples sobre los identificadores únicos.
El siguiente paso natural es limpiar directamente el DataFrame de transacciones en Postgres, ahora que ya tienes los catálogos listos para conectarse. ¿Qué otros campos crees que valdría la pena enriquecer en una base de comercio internacional? Cuéntame en los comentarios.