Python Advanced Series — Privacidad (PII)

17. Enmascaramiento de datos sensibles

17. Sensitive Data Masking

Sustituye nombres, correos y números reales por datos ficticios usando Faker para compartir entornos de prueba seguros.

Replace real names, emails, and numbers with fictional data using Faker to share safe testing environments.

⚠️ Advertencia de ciberseguridad y producción ⚠️ Cybersecurity and production warning

Este ejercicio es solo para aprendizaje y pruebas. No ejecutes scripts contra datos reales, ambientes de producción, APIs externas, portales con login, datos sensibles, sistemas críticos o repositorios empresariales sin autorización, respaldos, pruebas previas, permisos mínimos, control de cambios y cumplimiento de los protocolos de ciberseguridad de tu organización.

This exercise is for learning and testing only. Do not run scripts against real data, production environments, external APIs, login portals, sensitive data, critical systems, or enterprise repositories without authorization, backups, prior testing, least-privilege permissions, change control, and compliance with your organization's cybersecurity protocols.

Objetivo del ejercicio

Exercise objective

Crear una copia segura de un dataset reemplazando campos sensibles por valores ficticios conservando la estructura.

Create a safe copy of a dataset by replacing sensitive fields with fictional values while preserving structure.

Datos sintéticos

Synthetic data

nombre_realemail_realdepartamento
Ana Perezana@example.comIT
John Smithjohn@example.comHR

Ejemplo base

Base example

from faker import Faker

fake = Faker()
df["nombre_seguro"] = df["nombre_real"].apply(lambda x: fake.name())
df["email_seguro"] = df["email_real"].apply(lambda x: fake.email())

Resultado esperado

Expected result

nombre_seguroemail_segurodepartamento
Laura Millerkaren45@example.netIT
Daniel Brownrobert88@example.orgHR

Script completo

Complete script

# ==========================================================
# Python Advanced Topic 17
# Sensitive Data Masking with Faker
# ==========================================================

# pip install faker pandas

import pandas as pd
from faker import Faker

fake = Faker()

df = pd.DataFrame({
    "nombre_real": ["Ana Perez", "John Smith", "Maria Lopez"],
    "email_real": ["ana@example.com", "john@example.com", "maria@example.com"],
    "departamento": ["IT", "HR", "Finance"]
})

df_safe = df.copy()
df_safe["nombre_seguro"] = df_safe["nombre_real"].apply(lambda x: fake.name())
df_safe["email_seguro"] = df_safe["email_real"].apply(lambda x: fake.email())

# Remove original sensitive fields from the shareable file
df_safe = df_safe.drop(columns=["nombre_real", "email_real"])

df_safe.to_csv("dataset_enmascarado.csv", index=False)
print(df_safe)

Salida esperada en consola

Expected console output

  departamento       nombre_seguro              email_seguro
0           IT       Laura Miller     karen45@example.net
1           HR       Daniel Brown    robert88@example.org
2      Finance        Sarah Davis      sarah77@example.com

Aplicaciones reales

Real-world applications

  • Compartir data de prueba.
  • Proteger PII en demos y entrenamientos.
  • Crear ambientes seguros para desarrollo.
  • Enviar muestras a proveedores sin datos reales.
  • Share test data.
  • Protect PII in demos and training.
  • Create safe development environments.
  • Send samples to vendors without real data.

Recomendaciones

Recommendations

  • Eliminar campos originales antes de compartir.
  • Documentar qué campos fueron enmascarados.
  • No usar Faker como anonimización irreversible para alto riesgo.
  • Validar reglas legales y de compliance.
  • Remove original fields before sharing.
  • Document which fields were masked.
  • Do not treat Faker as irreversible anonymization for high risk.
  • Validate legal and compliance rules.

Valor del tópico

Topic value

El enmascaramiento permite practicar y desarrollar con datos realistas sin exponer identidades reales.

Masking enables practice and development with realistic data without exposing real identities.