Python Training · Topic 3

Validar emails corporativos

Marca correos mal escritos o que no pertenecen al dominio esperado.

Validate Corporate Emails

Flag malformed emails or emails outside the expected domain.

⚠️ Advertencia crítica antes de correr cualquier script

No ejecutes scripts de Python contra archivos oficiales, bases de datos reales, carpetas institucionales, SQL Server, Access, APIs internas o datasets sensibles sin autorización formal.

Python puede transformar miles o millones de filas en segundos. Un cambio mal probado puede sobrescribir archivos, alterar columnas críticas, crear resultados incorrectos, exponer datos sensibles o afectar procesos de BI, auditoría o producción.

Regla obligatoria del training: primero se trabaja con data sintética, luego con una copia controlada, después se valida el resultado, y solo entonces se considera usar datos reales siguiendo permisos, backup, change control, data governance y protocolos de ciberseguridad.

  • Permisos: usa solamente archivos y fuentes donde tengas autorización explícita.
  • Backups: nunca sobrescribas data original sin una copia recuperable.
  • Data governance: respeta privacidad, controles de acceso y clasificación de datos.
  • Producción: nunca conectes scripts a fuentes reales sin revisión, aprobación y plan de reversa.

⚠️ Critical warning before running any script

Do not run Python scripts against official files, real databases, institutional folders, SQL Server, Access, internal APIs, or sensitive datasets without formal authorization.

Python can transform thousands or millions of rows in seconds. A poorly tested change can overwrite files, alter critical columns, create incorrect outputs, expose sensitive data, or affect BI, audit, or production processes.

Mandatory training rule: start with synthetic data, then use a controlled copy, validate the result, and only then consider real data while following permissions, backups, change control, data governance, and cybersecurity protocols.

  • Permissions: use only files and sources where you have explicit authorization.
  • Backups: never overwrite original data without a recoverable copy.
  • Data governance: respect privacy, access controls, and data classification.
  • Production: never connect scripts to real sources without review, approval, and rollback planning.

Objetivo del Topic 3

Marca correos mal escritos o que no pertenecen al dominio esperado.

01 · Crear data
02 · Ejecutar limpieza
03 · Verificar resultado
Idea central: Validar emails antes de enviar o cargar reduce rebotes, errores de comunicación y retrabajo.

Topic 3 Objective

Flag malformed emails or emails outside the expected domain.

01 · Create data
02 · Run cleanup
03 · Verify result
Core idea: Validating emails before sending or uploading reduces bounces, communication errors, and rework.

Ruta de trabajo

Todo se ejecuta dentro de una carpeta controlada:

Working folder

Everything runs inside a controlled folder:

base_path = Path.home() / "Documents" / "AI Practical Training" / "Python" / "Topic 3"

Qué vamos a aprender

  • Crear data sintética controlada.
  • Leer y transformar datos con pandas.
  • Aplicar una regla de limpieza o validación.
  • Exportar resultados para revisión.
  • Verificar el resultado antes de usar datos reales.

What you will learn

  • Create controlled synthetic data.
  • Read and transform data with pandas.
  • Apply a cleaning or validation rule.
  • Export results for review.
  • Verify the result before using real data.
01

Script 1 — Crear data sintética

Este script prepara datos de práctica para ejecutar el ejercicio sin tocar información real.

Script 1 — Create synthetic data

This script prepares practice data to run the exercise without touching real information.

# Python Topic 3 - Script 1
from pathlib import Path
import pandas as pd

base_path = Path.home() / "Documents" / "AI Practical Training" / "Python" / "Topic 3"
data_path = base_path / "Data"
data_path.mkdir(parents=True, exist_ok=True)

raw_file = data_path / "emails_raw.xlsx"

df = pd.DataFrame({
    "employee_id": ["10001", "10002", "10003", "10004", "10005"],
    "name": ["John Smith", "Maria Garcia", "Carlos Rivera", "Ana Lopez", "Robert Lee"],
    "email": [
        "john.smith@miempresa.com",
        "maria.garcia@gmail.com",
        "carlos.riveramiempresa.com",
        "ana lopez@miempresa.com",
        "robert.lee@miempresa.com"
    ]
})
df.to_excel(raw_file, index=False)
print("Synthetic email file created:", raw_file)
print(df)
02

Script 2 — Ejecutar la acción principal

Este script aplica la lógica central del topic y genera el resultado principal.

Script 2 — Run the main action

This script applies the core topic logic and generates the main result.

# Python Topic 3 - Script 2
from pathlib import Path
import pandas as pd

base_path = Path.home() / "Documents" / "AI Practical Training" / "Python" / "Topic 3"
data_path = base_path / "Data"

raw_file = data_path / "emails_raw.xlsx"
clean_file = data_path / "emails_validated.xlsx"
invalid_file = data_path / "invalid_emails_report.xlsx"

df = pd.read_excel(raw_file)

pattern = r"^[A-Za-z0-9._%+-]+@miempresa\.com$"
df["email_valid"] = df["email"].astype(str).str.match(pattern, na=False)

invalid_emails = df[~df["email_valid"]].copy()
invalid_emails["issue"] = "Invalid format or outside expected domain"

df.to_excel(clean_file, index=False)
invalid_emails.to_excel(invalid_file, index=False)

print("Validated file created:", clean_file)
print("Invalid email report created:", invalid_file)
print(invalid_emails[["employee_id", "email", "issue"]])
Nota: este patrón debe probarse siempre con data sintética o copias controladas antes de adaptarlo a fuentes reales.
Note: this pattern should always be tested with synthetic data or controlled copies before adapting it to real sources.
03

Script 3 — Verificar o reportar resultados

Este script confirma el resultado final o genera evidencia para revisión.

Script 3 — Verify or report results

This script confirms the final result or generates evidence for review.

# Python Topic 3 - Script 3
from pathlib import Path
import pandas as pd

base_path = Path.home() / "Documents" / "AI Practical Training" / "Python" / "Topic 3"
data_path = base_path / "Data"

df = pd.read_excel(data_path / "emails_validated.xlsx")

print(df.groupby("email_valid").size().reset_index(name="record_count"))
print("\nInvalid records:")
print(df[~df["email_valid"]][["employee_id", "email"]])

Explicación simple del script

  • Path crea rutas portables en Windows.
  • pandas lee, transforma y exporta la tabla.
  • El Script 1 crea data sintética para practicar sin riesgo.
  • El Script 2 aplica la lógica principal del topic.
  • El Script 3 valida el resultado y deja evidencia.

Simple script explanation

  • Path creates portable Windows paths.
  • pandas reads, transforms, and exports the table.
  • Script 1 creates synthetic data for safe practice.
  • Script 2 applies the main topic logic.
  • Script 3 validates the result and leaves evidence.

Ejemplo esperado

CasoResultado
gmail.comoutside expected domain
missing @invalid
space in emailinvalid

Expected example

CaseResult
gmail.comoutside expected domain
missing @invalid
space in emailinvalid

Conclusión

Validar emails antes de enviar o cargar reduce rebotes, errores de comunicación y retrabajo.

Lección clave: Python aporta valor cuando convierte pasos repetitivos en procesos claros, auditables y reutilizables.

Conclusion

Validating emails before sending or uploading reduces bounces, communication errors, and rework.

Key lesson: Python adds value when it turns repetitive steps into clear, auditable, reusable processes.