PowerShell Advanced — Topic #4

Standardize State and City Names

Unificar nomenclaturas de estados o ciudades

Replace informal geographic variations such as Florida, Fla., and fl with one official standard value, making reporting, filtering, grouping, and downstream analysis more reliable.

Reemplazar variaciones informales como Florida, Fla. o fl por un estándar oficial, haciendo más confiables los reportes, filtros, agrupaciones y análisis posteriores.

FocusEnfoque
Geographic consistencyConsistencia geográfica
ToolHerramienta
PowerShell + Hashtable Mapping
OutputResultado
Standard state and city valuesValores geográficos estandarizados

Cybersecurity & Production Environment Warning

Advertencia de ciberseguridad y ambiente de producción

This exercise is for learning and testing purposes only. Do not run scripts against production data, network shares, official HR files, student records, patient records, enterprise repositories, or business-critical folders without proper authorization, backups, testing, least-privilege permissions, change-control approval, and compliance with your organization’s cybersecurity policies.

Este ejercicio es solo para aprendizaje y pruebas. No ejecutes scripts contra datos de producción, carpetas compartidas, archivos oficiales de recursos humanos, expedientes de estudiantes, expedientes de pacientes, repositorios empresariales o carpetas críticas sin autorización, respaldos, pruebas, permisos mínimos, aprobación de control de cambios y cumplimiento de las políticas de ciberseguridad de tu organización.

Business Scenario

Escenario de negocio

A CSV file contains addresses coming from multiple sources. State and city names are entered using different formats, abbreviations, casing, and informal labels. The goal is to standardize these values before reporting or loading the data into another system.

Un archivo CSV contiene direcciones provenientes de múltiples fuentes. Los estados y ciudades fueron ingresados con formatos, abreviaturas, mayúsculas/minúsculas y nombres informales diferentes. El objetivo es estandarizar estos valores antes de reportar o cargar la data en otro sistema.

Florida → FLFla. → FLfl → FLMiami Dade → Miami-Dade

Learning Objectives

Objetivos de aprendizaje

Sample Input Data

Data de entrada de ejemplo

EmployeeID,City,State
1001,Miami,Florida
1002,MIAMI,Fla.
1003,Hialeah,fl
1004,Miami Dade,FLORIDA
1005,Fort Lauderdale,Fla

Step 1 — Define Source and Output Files

Paso 1 — Definir archivos de entrada y salida

$sourceFile = "C:\Training\locations_raw.csv"
$outputFile = "C:\Training\locations_clean.csv"

Step 2 — Import the CSV File

Paso 2 — Importar el archivo CSV

$records = Import-Csv -Path $sourceFile

Step 3 — Create Standard Mapping Tables

Paso 3 — Crear tablas estándar de cruce

Hashtable mappings allow PowerShell to translate multiple source variations into one official value.

Las tablas hash permiten que PowerShell traduzca múltiples variaciones de origen hacia un solo valor oficial.

$stateMap = @{
    "FLORIDA" = "FL"
    "FLA"     = "FL"
    "FLA."    = "FL"
    "FL"      = "FL"
}

$cityMap = @{
    "MIAMI"       = "Miami"
    "HIALEAH"     = "Hialeah"
    "MIAMI DADE"  = "Miami-Dade"
    "MIAMI-DADE"  = "Miami-Dade"
}

Step 4 — Standardize State Values

Paso 4 — Estandarizar valores de estado

Trim spaces, convert values to uppercase, and use the mapping table to replace known variations.

Removemos espacios, convertimos a mayúsculas y usamos la tabla de cruce para reemplazar variaciones conocidas.

$records | ForEach-Object {
    $stateKey = $_.State.Trim().ToUpper()

    if ($stateMap.ContainsKey($stateKey)) {
        $_.State = $stateMap[$stateKey]
    }
}

Step 5 — Standardize City Values

Paso 5 — Estandarizar valores de ciudad

The same logic can be applied to city names, counties, departments, boroughs, or any geographic label used in reporting.

La misma lógica se puede aplicar a ciudades, condados, departamentos, boroughs o cualquier etiqueta geográfica usada en reportes.

$records | ForEach-Object {
    $cityKey = $_.City.Trim().ToUpper()

    if ($cityMap.ContainsKey($cityKey)) {
        $_.City = $cityMap[$cityKey]
    }
}

Step 6 — Export the Clean File

Paso 6 — Exportar el archivo limpio

$records | Export-Csv -Path $outputFile -NoTypeInformation -Encoding UTF8

Complete Script

Script completo

$sourceFile = "C:\Training\locations_raw.csv"
$outputFile = "C:\Training\locations_clean.csv"

$stateMap = @{
    "FLORIDA" = "FL"
    "FLA"     = "FL"
    "FLA."    = "FL"
    "FL"      = "FL"
}

$cityMap = @{
    "MIAMI"       = "Miami"
    "HIALEAH"     = "Hialeah"
    "MIAMI DADE"  = "Miami-Dade"
    "MIAMI-DADE"  = "Miami-Dade"
}

$records = Import-Csv -Path $sourceFile

$records | ForEach-Object {
    $stateKey = $_.State.Trim().ToUpper()
    $cityKey  = $_.City.Trim().ToUpper()

    if ($stateMap.ContainsKey($stateKey)) {
        $_.State = $stateMap[$stateKey]
    }

    if ($cityMap.ContainsKey($cityKey)) {
        $_.City = $cityMap[$cityKey]
    }
}

$records | Export-Csv -Path $outputFile -NoTypeInformation -Encoding UTF8

Expected Result

Resultado esperado

Before

Antes

CityState
MiamiFlorida
MIAMIFla.
Hialeahfl
Miami DadeFLORIDA
Fort LauderdaleFla

After

Después

CityState
MiamiFL
MiamiFL
HialeahFL
Miami-DadeFL
Fort LauderdaleFL

Validation Checklist

Lista de validación

Professional Notes

Notas profesionales

Geographic standardization should be controlled by a reviewed mapping table. Avoid hard-coding business assumptions without approval. For official reporting, use authoritative standards such as state abbreviations, county names, city names, district codes, or organization-approved geography tables.

La estandarización geográfica debe controlarse mediante una tabla de cruce revisada. Evita codificar supuestos de negocio sin aprobación. Para reportes oficiales, utiliza estándares autorizados como abreviaturas de estado, nombres de condado, nombres de ciudad, códigos de distrito o tablas geográficas aprobadas por la organización.