[Python en Fabric] 1 · Setup, carga y transformación: primeros pasos (sin drama)
Instalación para el que tiene mil pestañas abiertas y poca paciencia. Todo lo necesario, nada de lo que no.

1️⃣ INTRO
Sin tutoriales de 3 horas. Sin misterios. 15 minutos, todo explicado, cero sorpresas. Instalas → Descargas → Transformas → Ready.
🧱 Recordatorio rápido: qué es Fabric Microsoft Fabric es la plataforma unificada de datos de Microsoft: en un solo sitio tienes lago de datos, ingeniería, BI y tiempo real trabajando sobre el mismo almacenamiento (OneLake).
En este post usamos solo una parte: Notebooks + Lakehouse, la zona donde escribes código (Python/Spark) y guardas tus datos en formato optimizado (Parquet).
🗺️ Tu mapa de ruta para hoy
📍 Dónde estamos en la serie:
¿Te perdiste el anterior? 👈 Post 0: LELI5: ¿Por qué Fabric + Python? La intro. Si es tu primera vez, empieza aquí.
📌 Estás aquí: Post 1 Setup, Carga y Transformación Configura tu entorno en 15 minutos
Siguiente paso: 👉 Post 2: Limpieza y transformación (próximamente)
🎯 Qué haremos hoy (y por qué importa):
Hoy montamos el laboratorio donde pasa toda la magia digital. Sin este setup:
- ❌ No puedes cargar datos
- ❌ No puedes guardarlos para después
- ❌ Los próximos posts no tienen sentido
Con este setup:
- ➕ Tu entorno listo (nunca más “¿dónde lo dejé?”)
- ➕ Datos descargados y listos desde Kaggle
- ➕ Flujo reproducible para cualquiera
- ➕ Escala preparada para millones de registros
📋 Requisitos del Entorno — Tu lista de verificación Antes de empezar, asegúrate de tener:
Plataforma
- Microsoft Fabric con acceso a Notebooks
- Lakehouse creado en tu workspace (donde guardaremos los datos)
Entorno Python (ya incluido en Fabric)
- 🐍 Python: 3.10 o 3.11 (pre-instalado)
- ⚡ PySpark : 3.4 (Spark Runtime 1.3)
- 📦 Librerías base: pandas, numpy, matplotlib, seaborn, plotly
💡 Tranquilo: Si tienes Fabric, ya tienes el 95% listo. Solo necesitas instalar kagglehub en el primer paso del notebook.
🧩 LELI5 Mode:
Imagina que acabas de comprar un set LEGO gigante. Hoy:
- 📦 Desempacas la caja → Instalas librerías
- 🧮 Cuentas las piezas → Descargas datos desde Kaggle
- 🏗️ Armas la estructura base → Conviertes CSV → Pandas → Spark
- 📁 Guardas en cajas etiquetadas → Persistes en formato Parquet
Sin esta base, el próximo post no tiene sentido. Así que… ¡manos a la obra!
📑 Navegación rápida:
- 📚 Librerías y Setup — Tu caja de herramientas ⏱️ 2 min
- 🛠️ Funciones útiles — Funciones reutilizables ⏱️ 1 min
- 📥 Descarga desde Kaggle — Trae los datos a casa ⏱️ 3 min
- 🔄 De CSV a Spark — Escala tu pipeline ⏱️ 4 min
- 💾 Guardar en Parquet — Persiste para siempre ⏱️ 2 min
- 🎬 Conclusiones ⏱️ 1 min
2️⃣ NOTEBOOK
📚Librerías
Tu caja de herramientas
El plan: Instalar lo mínimo y traer solo las librerías que SÍ usaremos. Nada de extras que se quedan ahí acumulando polvo digital.
El código:
# Instalación de dependencias necesarias
%pip install -q kagglehub # 0.2+
# Importación de librerías
import os
import pandas as pd # ~2.1.x
import numpy as np # ~1.24.x
import matplotlib.pyplot as plt # ~3.7.x
import seaborn as sns # ~0.12.x
import plotly.express as px # ~5.14.x
print("Entorno configurado correctamente.")
📤 Resultado esperado:
Entorno configurado correctamente.
¿Qué significa “
%pip install -q kagglehub”?%pip: Comando especial de Jupyter/Fabric. Instala paquetes sin salir del notebook.install: Le dices a pip que instale algo.-q(quiet mode): Sin output. Normalmente pip te muestra un montón de texto. Con -q, trabaja en silencio. Más limpio, menos ruido.kagglehub: El paquete que necesitas (tu conexión a Kaggle). Resultado: Una línea, limpia, sin distracciones.
Tu caja de piezas LEGO especializada: Cada librería es como una caja de LEGO temática: tienes piezas de construcción básica, piezas de decoración, piezas móviles…
🧱 os Para qué sirve: Navega carpetas, lista archivos LELI5: La base verde donde construyes
🐼 pandas Para qué sirve: Lee CSVs, manipula tablas LELI5: Piezas básicas 2x4
⚙️ numpy Para qué sirve: Cálculos matemáticos rápidos LELI5: Piezas técnicas (engranajes)
🎨 matplotlib.pyplot Para qué sirve: Gráficos simples y útiles LELI5: Bloques de un solo color
🧩 seaborn Para qué sirve: Gráficos bonitos automáticos LELI5: Bloques pre-decorados
💡 plotly.express Para qué sirve: Gráficos interactivos PRO LELI5: Sets con luces y movimiento
🚚 kagglehub Para qué sirve: Descarga datasets de Kaggle LELI5: El camión que trae las piezas
¿Por qué solo estas? Porque son lo esencial para cargar, explorar y visualizar. Scikit-learn, TensorFlow y compañía vienen después. Hoy: lo básico, bien hecho.
🛠️ Funciones
Funciones reutilizables
El plan: Las funciones son como bloques de LEGO personalizados: los construyes una vez, los usas mil veces. Sin ellas, repetición. Con ellas, magia. Hoy crearemos una función que “limpia” nombres de columnas. La usaremos más adelante cuando guardemos datos en bases de datos (spoiler: en el próximo post).
El código:
def estandarizar_col(col):
"""
Estandariza el nombre de una columna para que sea seguro al guardar
en bases de datos o sistemas tipo Lakehouse/Delta.
Convierte la cadena a minúsculas, elimina paréntesis,
reemplaza espacios y símbolos comunes por guion bajo,
y elimina guiones bajos repetidos o al final.
Args:
col (str): Nombre original de la columna.
Returns:
str: Nombre estandarizado de la columna.
"""
# Elimina espacios iniciales y finales y convierte a minúscula
col = col.strip().lower()
# Elimina paréntesis
col = col.replace('(', '')
col = col.replace(')', '')
# Reemplaza espacios, guiones, barras y puntos por guion bajo
col = col.replace(' ', '_')
col = col.replace('-', '_')
col = col.replace('/', '_')
col = col.replace('.', '_')
# Elimina guiones bajos dobles por guion bajo simple (si los hubiera)
col = col.replace('__', '_')
# Elimina cualquier guion bajo al final del nombre
col = col.rstrip('_')
return col
📤 Resultado esperado:
Función estandarizar_col definida sin errores.
¿Por qué esto es importante?
Imagina guardar datos y que una columna se llame "Total-Ventas ($)". Las bases de datos odian:
- ❌ Espacios — causan errores
- ❌ Paréntesis — rompen queries SQL
- ❌ Mayúsculas — son inconsistentes
Con esta función:
- ➕ Todo en minúsculas
- ➕ Sin símbolos raros
- ➕ Solo guiones bajos
Resultado: Nombres limpios, cero problemas Nota: No la usamos todavía en este post, pero la tendrás lista para el próximo (limpieza de datos).
🎯 Checkpoint de Progreso
¿Qué llevamos hasta ahora?
- ✅ Librerías importadas (tu caja de herramientas)
- ✅ Función de limpieza creada (tu bloque LEGO personalizado)
¿Qué sigue? Ahora viene lo emocionante: traer los datos a casa desde Kaggle. Sin configuraciones complicadas, sin API keys. Solo copiar, pegar y listo.
📥 Carga de datos desde Kaggle
Trae el dataset a casa
El plan: Kaggle te da el código listo. Solo copia y pega. Así de simple.
Pasos:
- 🌐 Ve a la página del dataset en Kaggle
- 📋 Haz clic en el botón de código (como en la imagen)
- 📄 Copia el snippet que dice
import kagglehub - ✅ Pégalo en tu notebook y ejecútalo
👇 Así encuentras el código en Kaggle:

Botón “Download” → Opción “kagglehub” → Copia el código
El código:
# Descargar dataset desde Kaggle usando kagglehub
import kagglehub
# Definir dataset y descargar
path = kagglehub.dataset_download("karnikakapoor/wonders-of-world")
# Verificar archivos descargados
os.listdir(path)
📤 Resultado esperado:
Out[3]:
['wonders_of_world rev3.csv',
'wonders_of_world_enhanced_25.csv',
'WondersOfWorld_24.csv',
'wonders_of_world.csv',
'WondersOfWorld_July24.csv']
¿Qué está pasando?
kagglehubse conecta a Kaggle → Automático, sin configuración previa- Descarga el dataset completo → Lo guarda en una carpeta temporal
os.listdir(path)te muestra los archivos descargados → Así sabes qué CSVs tienes
Es como pedir un set por Amazon: haces clic, esperas, y te llega a casa. Sin llenar formularios ni configurar nada y si falla, no desesperes🚨**:**
⏳ Primera descarga lenta Causa: Kaggle está descargando. Es normal. Solución: Espera unos segundos.
🔍 Dataset not found
Causa: Nombre del dataset incorrecto
Solución: Verifica que copiaste bien el nombre: "usuario/nombre-dataset"
📡 Network error Causa: Problemas de conexión Solución: Revisa tu conexión a Internet
❓ Otros errores Causa: Dataset movido o eliminado Solución: Intenta con otro dataset. Hay miles disponibles en Kaggle.
💡 Ventajas de kagglehub:
- ➕ Cero configuración — No necesitas
kaggle.json - ➕ Un clic — Copias el código de Kaggle y listo
- ➕ Actualizado automáticamente — Siempre descarga la última versión del dataset
- ➕ Sin zips — No tienes que descomprimir nada manualmente
🎉 Progreso actualizado
Ya tenemos:
- ✅ Herramientas listas
- ✅ Función de limpieza
- ✅ Datos descargados desde Kaggle
Siguiente paso: Abrir los archivos CSV y verificar que todo está en orden. Luego los convertiremos a formato escalable (Spark + Parquet).
🏗️ Proceso: Carga de CSV → Pandas → Parquet
🗃️ Carga de Datos
🔄 De CSV a Spark — El viaje de escalabilidad
Este es el corazón del pipeline. Aquí convertimos datos pequeños en datos ESCALABLES.
Paso 4.1: CSV → Pandas (Primer contacto)
El plan: Abrir el CSV, cargarlo en Pandas (tu cuaderno digital), y verificar que todo está bien.
El código:
# - - CARGA DE DATOS - -
#Descargar archivo CSV local a Dataframe de Pandas
csv_local_path = f"{path}/wonders_of_world_enhanced_25.csv"
df_pd = pd.read_csv(csv_local_path)
#Verificación de Dataframe pandas
display(df_pd.head())
df_pd.shape
📤 Resultado esperado:
Primeras filas (vista tabla con 5 filas x varias columnas)
Out[25]:
(51, 33)
¿Qué está pasando?
pd.read\_csv()→ Lee el archivo CSV y lo convierte en tabla (DataFrame).head()→ Muestra las primeras 5 filas. Nunca cargues todo si son millones de registros.shape→ Te dice cuántas filas (registros) y columnas (variables) tienesdisplay()→ En notebooks, muestra tablas bonitas (vs.print()que muestra texto plano)
Es como abrir la caja de LEGO y contar todas las piezas antes de empezar a armar. Así no hay sorpresas.
Paso 4.2: Pandas → Spark (Solo para guardar en Parquet)
El plan: Convertir Pandas a Spark solo para guardar en Parquet ¿Por qué? Spark es el “puente nativo” que Fabric necesita. Toda la transformación la hacemos en Pandas.
¿Por qué esta conversión?
- Pandas 🐼→ Perfecto para cargar, explorar y transformar (lo usaremos todo el tiempo)
- Spark ⚡→ En Fabric, es el “puente” para guardar en Parquet de manera eficiente
- Parquet 🦜→ El formato optimizado que Fabric ama (comprimido, rápido, escalable)
Pandas es tu mesa de trabajo donde armas las piezas. Spark es el camión que lleva tu construcción terminada al almacén (Parquet) para guardarla de forma segura.
⚠️ Aclaración importante:
- Este dataset tiene solo 51 filas (pequeño)
- No necesitamos Spark para procesarlo
- Lo usamos SOLO porque es la forma en que Fabric guarda en Parquet
- En proyectos reales, seguirás transformando en Pandas y guardando vía Spark
El código:
#Conversion de DataFrame de Pandas a DataFrame de Spark
df_spark = spark.createDataFrame(df_pd)
#Verificación de Dataframe Spark
print("Primeras filas:")
display(df_spark.head(5))
print("Shape (filas, columnas):")
print((df_spark.count(), len(df_spark.columns)))
📤 Resultado esperado:
Primeras filas:
<tabla con 5 filas y 33 columnas, similar a df_pd>
Shape (filas, columnas):
(51, 33)
¿Qué está pasando?
Aquí pasa la magia. De lo pequeño a lo GIGANTE:
📊 Característica: Capacidad • Pandas 🐼: Datos < 1 GB • Spark ⚡: Datos > 1 GB (millones/billones) • LELI5: Pandas = armas solo en tu mesa | Spark = un equipo de 100 personas armando en paralelo
⚡ Característica: Velocidad • Pandas 🐼: Rápido para explorar • Spark ⚡: 10–100x más rápido en grandes volúmenes • LELI5: Pandas = tú construyendo a mano | Spark = fábrica automatizada
🎯 Característica: Uso ideal • Pandas 🐼: Prototipado, “¿qué hay aquí?” • Spark ⚡: Producción, “procesa TODO RÁPIDO” • LELI5: Pandas = boceto en papel | Spark = construcción final
💻 Característica: Dónde trabaja • Pandas 🐼: En tu computadora (RAM local) • Spark ⚡: Distribuido (múltiples máquinas) • LELI5: Pandas = tu escritorio | Spark = almacén con 1000 mesas
⚠️ Nota importante para este dataset: Este dataset tiene solo 51 filas (es pequeño para demostración). NO necesita Spark en la vida real.
¿Entonces por qué usamos Spark? Porque cuando tengas millones de registros, ya sabrás cómo hacerlo. Estás aprendiendo el flujo escalable desde ahora.
⚠️ Troubleshooting: Si algo falla con Spark
❌ Error: spark is not defined
Causa probable: Notebook en modo Python (no PySpark)
Solución: En el menú superior, cambia el lenguaje a PySpark
❌ Error: SparkSession not found
Causa probable: Spark no inicializó correctamente
Solución: Reinicia el kernel: Run → Restart Kernel
❌ Error: Java heap space error
Causa probable: Datos muy grandes para RAM disponible
Solución: Usa .limit(1000) para probar con menos datos
⏳ Conversión muy lenta (>1 min) Causa probable: Dataset grande o primera ejecución Solución: Normal. Spark se está inicializando. Espera.
💡 Tip importante: En Microsoft Fabric, Spark se inicializa automáticamente en notebooks PySpark. Si usas un notebook Python puro, no tendrás acceso a la variable
spark.
🚀 Casi terminamos
Recapitulando:
- ✅ CSV abierto en Pandas (exploración y transformación)
- ✅ Convertido a Spark (listo para escalar)
Paso final: Guardar en formato Parquet. Así los datos persisten en disco, ocupan menos espacio, y se leen 10–100x más rápido en el futuro.
💾 Persistencia inicial (Parquet)
🦜Guardar en Parquet — Persiste para siempre
El plan: Pasar de memoria (volátil) a disco duro (permanente). Guardamos en un formato que Spark ama.
El código:
#Guardar Dataframe como Parquet
df_spark.write.mode("overwrite").format("parquet").save("Files/parquet_raw")
📤 Resultado esperado:
Archivo Parquet guardado correctamente.
¿Qué está pasando?
.write→ Inicia el proceso de escritura.mode("overwrite")→ Si ya existe, lo borra y reescribe (modo seguro para desarrollo).format("parquet")→ Formato de archivo que usaremos.save("Files/parquet/raw")→ Carpeta donde guarda
Es como guardar tu construcción armada dentro de una caja transparente. Cuando la abras mañana, estará exactamente igual.
💾 CSV vs. Parquet — ¿Cuál utilizar?
📊 Tamaño de archivo • CSV 📄: 100% (baseline) • Parquet 🦜: 10–30% (70–90% menos) • LELI5: CSV = piezas tiradas en el suelo | Parquet = piezas en cajitas organizadas
⚡ Velocidad de lectura • CSV 📄: 1x (lento) • Parquet 🦜: 10–100x más rápido • LELI5: CSV = buscar pieza por pieza | Parquet = ir directo al cajón correcto
✨ Spark optimizado • CSV 📄: ❌ No • Parquet 🦜: ✅ Sí • LELI5: CSV = instrucciones en papel arrugado | Parquet = manual digital con buscador
🔢 Tipos de datos preservados • CSV 📄: ❌ Todo es texto • Parquet 🦜: ✅ Sí (int, float, date, etc.) • LELI5: CSV = todas las piezas mezcladas | Parquet = cada tipo en su cajón
Analogía LELI5 completa: — CSV 📄 = Todas tus piezas tiradas en el suelo. Fácil de ver, pero caótico y ocupa todo el espacio. — Parquet 🦜 = Piezas organizadas en cajitas por color y tamaño. Compacto, rápido de encontrar, y todo en su lugar.
🎯 Checkpoint Final — Verifica que todo funciona
Antes de celebrar, confirmemos que completaste el pipeline:
Lista de verificación
— ✅ Librerías importadas
- Sin errores al ejecutar
import pandas as pd, etc.
— ✅ Dataset descargado
os.listdir(path)muestra 5 archivos CSV
— ✅ DataFrame en Pandas
df_pd.shapedevuelve(51, 33)
— ✅ Conversión a Spark exitosa
df_spark.count()devuelve51
— ✅ Parquet guardado
- Archivo guardado en
Files/parquet/raw/
3️⃣ CONCLUSIONES
📊 Resumen: Lo que acabas de construir
✅ Instalamos las librerías necesarias (caja de herramientas) ✅ Creamos funciones para limpiar datos ✅ Descargamos datos desde Kaggle (trajimos los LEGO a casa) ✅ Convertimos CSV → Pandas → Spark (escalamos la operación) ✅ Guardamos en 🦜 Parquet (aseguramos los datos)
Spoiler En el próximo post limpiaremos estos datos (eliminar ruido, valores faltantes), los exploraremos a fondo y crearemos visualizaciones que impresionan. ¡Paso a paso, como armar un LEGO gigante! 🧩
🧰 Kit de recursos y Links clave 🔗
🎯 Recursos de este post
📊 Dataset: Wonders of the World La base de datos que usamos hoy: 51 maravillas del mundo con 33 variables.
📓 Notebook completo de este post. El código paso a paso. Cópialo, ejecútalo, rómpelo, aprende.
📚 Documentación oficial
📓 Cómo usar Notebooks en Fabric Cómo crear, importar y trabajar con notebooks en Fabric. Tutorial oficial paso a paso.
📘 Microsoft Fabric en español La guía oficial. Instrucciones completas de la plataforma.
🐍 Python 3.14 Referencia completa del lenguaje.
🐼 Pandas Todo sobre manipulación de datos en tablas.
⚡ Azure Databricks — PySpark Conceptos básicos para trabajar con Spark.
📦 Kagglehub — Documentación oficial
Documentación completa de la librería kagglehub. Métodos, ejemplos y troubleshooting.
🦜 Coralogix — Parquet Guide Qué es Parquet, cómo funciona, y por qué es mejor que CSV para big data.
🧩 Recursos LELI5 (explicados como LEGOs)
📖 Glosario LELI5 Términos técnicos traducidos a LEGO: Fabric, Parquet, Kaggle, Notebooks y más.
🔗 Serie completa: Python en Fabric
- [Python en Fabric] 🧱 0. LELI5: Fabric + Python = ¿Pipeline Fácil? (especial W4TT) — ¿Por qué esta serie?
- 👉 [Python en Fabric] 🗿1. Setup, Carga y Transformación: Primeros Pasos (sin drama)
- 🔜 [Python en Fabric] 🏛️ 2. Limpieza y transformación
- 🔜 [Python en Fabric] ⛩️ 3. Exploración y análisis
- 🔜 [Python en Fabric] 🏰 4. Exportación
- 🔜 [Python en Fabric] 🏙️ 5. Visualización interactiva
🎓 Recursos adicionales para profundizar
📄 Pandas Official Cheat Sheet (PDF) Una página con lo esencial: leer datos, filtrar, agrupar, visualizar.
🎥 Tutorial en video: YouTube: Fabric Notebook Masterclass (3 horas) Curso completo gratuito. Perfecto si prefieres aprender viendo.
👾 ¿Dudas, sugerencias, curiosidad?
¿Ya montaste tu primer LEGO digital? ¡Cuéntamelo todo y exagera! Compártelo aquí, o presume tu caos absoluto. ¿Prefieres DM? ¡También cuenta! Piérdele miedo al botón rojo y dale click. Aquí todo es para aprender jugando. ¿Tienes otro término tech que te gustaría entender en modo LEGO? Déjamelo y lo convierto en Leli5.
También publicado en Medium.