Sample Dirty CSV File — Messy Data for Cleaning Practice
A small CSV that packs in every common data-quality problem on purpose — inconsistent casing, stray whitespace, five different date formats, currency symbols, duplicates and blank fields. Made for teaching data cleaning.
Preview
| id | Full Name | signup date | amount | country | is_active | |
|---|---|---|---|---|---|---|
| 1 | John Smith | [email protected] | 2026-01-05 | $1,200.00 | USA | Yes |
| 2 | jane doe | [email protected] | 05/01/2026 | 900 | U.S.A. | yes |
| 3 | JOHN SMITH | [email protected] | Jan 5, 2026 | 1200 | United States | TRUE |
| 4 | María García | maria@example | 2026-1-7 | €750.5 | Spain | 1 |
| 5 | · | [email protected] | · | N/A | · | 0 |
| 6 | Liu Yang | [email protected] | 2026/01/09 | 2000.00 | china | No |
Showing the first 6 of 15 rows.
Columns
| Column | Type | Description |
|---|---|---|
id | integer | Row id — one row has text where a number belongs |
Full Name | string | Header has a space; values have inconsistent case and padding |
email | string | Mixed case, trailing spaces, one invalid address |
signup date | string | Five different formats: ISO, US, EU, "Jan 5, 2026", dotted |
amount | string | $, €, thousands separators, EU decimal comma, negatives, "N/A" |
country | string | "USA", "U.S.A.", "United States", "DE", trailing spaces |
is_active | string | Yes/yes/TRUE/1/Y/active/No/no/FALSE/0 — all mixed |
What makes this file useful
- Rows 6 and 7 are the same person ("Liu Yang") with different formatting — an exact-value dedupe misses them, a normalised dedupe catches them.
- amount mixes US ($1,200.00) and EU (1.250,00) conventions in the same column — you must decide a canonical format.
- Row 13 is intentionally broken (text in id, "not a date", "free" in amount) so you can test row-level validation and rejection.
- is_active has eight different truthy/falsy spellings — a mapping table is the clean fix.
Use cases
- Teach a full clean: trim, case-normalise, parse dates, strip currency, dedupe
- Test that your pipeline flags the bad-type row instead of crashing
- Practise standardising country names to ISO codes
- Show before/after in a data-quality demo
Open it in a tool
Load this sample — or your own file — into a real tool. Everything runs client-side.
Related guides
More sample datasets
Frequently asked questions
Why would I want a broken file?
To practise fixing it. Real exports look like this. Learning on a clean file does not prepare you for the messy ones.
What is the "right" cleaned version?
There is no single answer, but a good result: trimmed strings, Title Case names, lowercase emails, ISO dates, numeric amount in one currency convention, ISO country codes, boolean is_active, and the broken row quarantined.
How many rows?
15 rows plus the header — small enough to inspect every one by hand.
Turn this into a saved workflow
Create a free account to save the steps from this guide as a reusable workflow and re-run it on any file, from any device.
Follow HowToCSV on Google
Add us as a preferred source on Google Search so our latest CSV guides and tutorials surface more often in your Top stories.