Pandas Practical & Real Use Cases

Use Case #2 — Standardize Text and Category Values

Normalize spaces, capitalization, spelling variations, and equivalent business categories without changing the underlying meaning.

Caso práctico progresivo para transformar datos municipales sucios en información confiable, analizable y útil para decisiones.

Security notice: Run these scripts only in a controlled practice environment. Do not execute them in production or institutional systems without authorization, backups, testing, least-privilege permissions, change control, and compliance with organizational protocols.
Aviso de seguridad: Ejecuta estos scripts únicamente en un ambiente controlado de práctica. No los corras en producción ni en sistemas institucionales sin autorización, respaldos, pruebas, permisos mínimos, control de cambios y cumplimiento de los protocolos organizacionales.

Business Purpose

Propósito de negocio

Normalize spaces, capitalization, spelling variations, and equivalent business categories without changing the underlying meaning.

Este caso continúa el flujo real de trabajo con solicitudes de servicios municipales y documenta cada transformación de forma trazable.

Input and Output

Entrada y salida

Inputmessy_city_service_requests.csv
Outputstandardized_city_service_requests.csv
SeriesUse Case #2 of 20

Results can vary because the source dataset was generated synthetically and randomly. Run the code to obtain the exact values from your local file.

Los resultados pueden variar porque el dataset de origen fue generado de forma sintética y aleatoria. Ejecuta el código para obtener los valores exactos de tu archivo local.

Step 1 — Load the source dataset

import pandas as pd
from pathlib import Path

base = Path.home() / "Documents" / "Pandas_Use_Cases"
input_file = base / "messy_city_service_requests.csv"
output_file = base / "standardized_city_service_requests.csv"

df = pd.read_csv(input_file)

print(f"Rows loaded: {len(df):,}")
print(f"Columns loaded: {df.shape[1]}")

Expected Result / Interpretation

Resultado esperado / Interpretación

Rows loaded: 530
Columns loaded: 22

Step 2 — Trim all text columns

text_columns = df.select_dtypes(include="object").columns

for column in text_columns:
    df[column] = df[column].str.strip()

print(f"Text columns processed: {len(text_columns)}")

Expected Result / Interpretation

Resultado esperado / Interpretación

Leading and trailing spaces removed from every text column.

Step 3 — Standardize business categories

maps = {
    "City": {
        "HIALEAH": "Hialeah",
        "MIAMI": "Miami",
        "DORAL": "Doral",
        "Miami-Lakes": "Miami Lakes"
    },
    "State": {
        "fl": "FL",
        "Fla": "FL",
        "Florida": "FL"
    },
    "Priority": {
        "HIGH": "High",
        "high": "High",
        "Med": "Medium",
        "medium": "Medium",
        "LOW": "Low",
        "Normal": "Medium"
    },
    "Status": {
        "open": "Open",
        "OPEN": "Open",
        "closed": "Closed",
        "In progress": "In Progress"
    },
    "Request_Channel": {
        "phone": "Phone",
        "Website": "Web",
        "App": "Mobile App"
    },
    "Department": {
        "public works": "Public Works",
        "PUBLIC WORKS": "Public Works",
        "Sanitation Dept": "Sanitation",
        "Water and Sewer": "Water & Sewer"
    },
    "Service_Type": {
        "pothole": "Pothole",
        "POTHOLE": "Pothole",
        "Streetlight": "Street Light",
        "street light": "Street Light",
        "Garbage Pickup": "Garbage",
        "Trash": "Garbage",
        "water leak": "Water Leak",
        "Noise": "Noise Complaint"
    }
}

for column, mapping in maps.items():
    df[column] = df[column].replace(mapping)

Expected Result / Interpretation

Resultado esperado / Interpretación

Equivalent labels are consolidated into one approved value per category.

Step 4 — Compare cardinality after standardization

review_columns = [
    "City", "State", "Priority", "Status",
    "Request_Channel", "Department", "Service_Type"
]

for column in review_columns:
    print(f"\n{column}: {df[column].nunique(dropna=False)} values")
    print(df[column].value_counts(dropna=False).to_string())

Expected Result / Interpretation

Resultado esperado / Interpretación

Category counts should decrease because duplicate spellings and formats are merged.

Step 5 — Export the standardized dataset

df.to_csv(output_file, index=False, encoding="utf-8-sig")

print(f"Saved: {output_file}")
print(f"Rows exported: {len(df):,}")

Expected Result / Interpretation

Resultado esperado / Interpretación

A new standardized CSV is created while the raw source remains unchanged.

Use Case #2 Completed

Caso de uso #2 completado

The output of this module becomes the controlled input for the next stage of the 20-case Pandas workflow.

La salida de este módulo se convierte en la entrada controlada para la siguiente etapa del flujo de 20 casos de Pandas.

More Community & Local Opportunity Resources

Más recursos comunitarios y oportunidades locales

Explore additional resources connected to local training, practical skills, employment opportunities, and community growth.

Explora recursos adicionales relacionados con capacitación local, habilidades prácticas, oportunidades de empleo y crecimiento comunitario.

HialeahOficios

Community-focused resources for trades, skills, local opportunities, and practical career development.

Recursos comunitarios enfocados en oficios, habilidades, oportunidades locales y desarrollo profesional práctico.

hialeahoficios.com

MiamiOficios

Miami-oriented resources for practical learning, employment pathways, and workforce development.

Recursos orientados a Miami para aprendizaje práctico, rutas de empleo y desarrollo de la fuerza laboral.

miamioficios.com