Fundamentos de Ingeniería de Datos
9 ejemplos para empezar con Ingeniería de Datos - 7 básicos y 2 intermedios.
Busca en todas las páginas de la documentación
9 ejemplos para empezar con Ingeniería de Datos - 7 básicos y 2 intermedios.
uv pip install pandas pyarrow prefectAlmacena datos sin procesar en almacenamiento columnar antes de las transformaciones.
import pandas as pd
df = pd.read_csv("orders.csv", parse_dates=["ordered_at"], dtype={"region": "category"})
df.to_parquet("raw/orders.parquet", index=False, compression="zstd")dt=2025-01-15/ aceleran las lecturas selectivas.Relacionado: Formatos de Archivo - Parquet y Arrow
Limpia y da forma a los datos en un paso scriptable.
import pandas as pd
df = pd.read_parquet("raw/orders.parquet")
clean = (
df.dropna(subset=["order_id"])
.assign(revenue=pd.to_numeric(df["revenue"], errors="coerce"))
.query("revenue >= 0")
)
clean.to_parquet("staging/orders_clean.parquet", index=False)Relacionado: Limpieza y Transformación de Datos
Actualiza o sobrescribe particiones para que los reintentos no dupliquen.
import pandas as pd
from pathlib import Path
run_dt = "2025-01-15"
out = Path(f"mart/orders/dt={run_dt}/data.parquet")
out.parent.mkdir(parents=True, exist_ok=True)
df.to_parquet(out, index=False) # sobrescribe la partición para esta fecharun_dt reemplaza, no anexa duplicados.Relacionado: Fiabilidad del Flujo de Trabajo - decisiones de idempotencia
Los trabajos por lotes se ejecutan en un reloj cuando la tolerancia a la latencia es de horas.
# crontab: 0 6 * * * /path/.venv/bin/python /path/jobs/daily_orders.py
import logging
logging.basicConfig(level=logging.INFO)
logging.info("daily_orders started")Relacionado: Airflow - programación de DAGs
Una función por paso con entradas/salidas tipadas.
from pathlib import Path
import pandas as pd
def extract(path: Path) -> pd.DataFrame:
return pd.read_parquet(path)
def transform(df: pd.DataFrame) -> pd.DataFrame:
return df.groupby("region", observed=True)["revenue"].sum().reset_index()
def load(df: pd.DataFrame, path: Path) -> None:
path.parent.mkdir(parents=True, exist_ok=True)
df.to_parquet(path, index=False)extract -> transform -> load.Relacionado: Prefect & Dagster
Rechaza datos incorrectos antes de que lleguen a los marts.
import pandera.pandas as pa
schema = pa.DataFrameSchema({
"order_id": pa.Column(int, unique=True),
"revenue": pa.Column(float, pa.Check.ge(0)),
})
schema.validate(df)Relacionado: Validación y Calidad de Datos
La visibilidad operativa comienza con métricas simples.
import logging
logger = logging.getLogger(__name__)
def transform(df):
logger.info("input_rows=%s", len(df))
out = df.drop_duplicates("order_id")
logger.info("output_rows=%s", len(out))
return outRelacionado: Mejores Prácticas de Ingeniería de Datos
Orquesta tareas de Python con reintentos e interfaz de usuario.
from prefect import flow, task
import pandas as pd
@task(retries=2, retry_delay_seconds=30)
def extract() -> pd.DataFrame:
return pd.read_parquet("raw/orders.parquet")
@flow(log_prints=True)
def daily_orders():
df = extract()
# transform + load ...
if __name__ == "__main__":
daily_orders()@task aíslan fallos transitorios de S3/DB.Relacionado: Prefect & Dagster
Escanea solo las fechas que necesitas.
import pandas as pd
df = pd.read_parquet("mart/orders", filters=[("dt", ">=", "2025-01-01")]scan_parquet de Polars ofrece la misma descarga de predicados.Relacionado: Formatos de Archivo - diseño de partición
Versiones de la Pila: Esta página fue escrita para Python 3.14.0 (estable 3.14, mantenimiento 3.13), FastAPI 0.115+, Django 5.2, Flask 3.1, Pydantic 2, PyTorch 2.6+, pandas 2.2+, Polars 1.x, ruff 0.9+, y uv 0.6+.
Revisado por Chris St. John·Última actualización: 16 jul 2026