Topics in this subject
Pandas 1 min read Updated 4 Aug 2026

Project 1 — Cleaning a Messy Dataset

raw = pd.DataFrame({

raw = pd.DataFrame({
    'Name':   [' Alice ', 'BOB', 'charlie', None, 'Alice '],
    'Age':    ['25', '30', 'unknown', '40', '25'],
    'Salary': [50000, 60000, None, 80000, 50000],
    'City':   ['NYC', 'nyc', 'LA ', 'SF', 'NYC']
})

# Step 1: standardize text
raw['Name'] = raw['Name'].str.strip().str.title()
raw['City'] = raw['City'].str.strip().str.upper()

# Step 2: coerce Age to numeric (bad strings -> NaN)
raw['Age'] = pd.to_numeric(raw['Age'], errors='coerce')

# Step 3: impute missing values
raw['Age']    = raw['Age'].fillna(raw['Age'].median())
raw['Salary'] = raw['Salary'].fillna(raw['Salary'].median())
raw = raw.dropna(subset=['Name'])

# Step 4: remove duplicates
raw = raw.drop_duplicates()

print(raw)

What happened: trimmed/normalized strings, converted 'unknown' to NaN via coerce, median-imputed numerics, dropped null names, and de-duplicated. This is the canonical cleaning pipeline.