All capabilities · Data engineering & analytics

Clean and transform data with Pandas

Load messy CSV/Excel/JSON, handle nulls, joins, reshaping, and reproducible notebooks.

~15 focused hoursbeginner
Explore 4 tools for this project
Market relevance

Which roles ask for this — and how often

Share of job postings in India, per role, that name this capability.

What employers mean

You should be able to…

  1. Load messy CSV/Excel/JSON with inconsistent encodings, headers, and types
  2. Handle missing/null values with a documented, defensible strategy (not silent dropna everywhere)
  3. Merge and reshape data (pivot, melt, groupby-agg) to answer a specific question
  4. Detect and fix data quality issues: duplicate rows, mixed date formats, inconsistent categorical labels
  5. Write reproducible notebooks — deterministic outputs, no hidden manual edits to the raw file
  6. Profile a new dataset quickly (shape, dtypes, nulls, value counts) before doing real analysis
  7. Extract a clean table from a real-world dirty spreadsheet with merged cells and multiple headers

Needs first: Write production-quality Python for AI work

Learn — free, link-checked

The few resources that matter

Tools for practice

Choose a tool for the job

Start with one tool for each part of your project. You don’t need to learn them all.

Go to the practice brief

4 tools to explore

Google Sheets

Data · Plan & explain

Build a scoring sheet, clean a small dataset or make assumptions visible in a simple model.

Practice

Clean and reconcile a messy startup-funding export

Take the Indian Startup Funding dataset — a genuinely dirty real export with amounts stored as strings with commas, four different date formats, city names spelled several ways (Bangalore/Bengaluru/Banglore), investor lists crammed into one column, and duplicate rows from repeated scrapes. Produce one clean, analysis-ready table plus a data-quality report, as a reproducible Jupyter notebook that runs on the raw file with no manual pre-editing. Every judgement call — what you dropped, what you imputed, what you merged — gets written down.

Start from

Indian Startup Funding dataset on Kaggle — ~3k funding rounds with inconsistent dates, city spellings, and amounts stored as text

Milestones
  1. Profile the raw file: nulls per column, dtype surprises, duplicate candidates · ~2h
  2. Parse the mixed date formats and coerce the text amounts to numbers, logging every failure · ~3h
  3. Normalize city/industry/investor text with a mapping plus fuzzy matching, and de-duplicate · ~2.5h
  4. Emit the data-quality report and the cleaned table, and write up the judgement calls · ~2h
Done when
  • Notebook runs top-to-bottom on the raw file with no manual pre-editing required
  • Produces a documented data-quality report: % nulls per column, duplicates found and removed, date-parse failures
  • At least one fuzzy-matching or normalization step for inconsistent categorical text (agent names, statuses)
  • Final clean table is exported and a short markdown section explains every judgment call made
Prove it

Evidence a recruiter can check

  • A data-quality report listing every issue found with counts — nulls per column, rows de-duplicated, dates that failed to parse and what you did with them
  • The city/investor normalization mapping as a reviewable file, so a stranger can check whether 'Banglore → Bengaluru' style merges were right
  • A notebook that runs top-to-bottom on the untouched raw file, with before/after row and null counts printed inline
  • A short judgement-calls section naming what you dropped versus imputed, and why each choice could be wrong
Signal it

Turned a 3k-row scraped funding export into an analysis-ready table with a reproducible Pandas notebook — normalizing four date formats, text-encoded amounts and duplicated city spellings, with every drop and merge documented.

Interview

Questions you'll get asked

  1. Walk me through your process the first 10 minutes you open a dataset you've never seen.
  2. How do you decide between dropping, imputing, or flagging missing values?
  3. You have two datasets that should join on customer ID but the join drops 15% of rows — how do you debug it?
  4. Explain the difference between .apply(), vectorized operations, and why one is usually faster.
  5. How would you deduplicate records that are 'the same customer' but spelled slightly differently?
  6. Given a wide table of monthly columns, how do you reshape it to long format for analysis?
  7. What's a time you found a data quality bug that changed the conclusion of an analysis?