CSV Cleaning Studio
Remove duplicates, fix missing values, standardise dates and export a clean CSV. Your file never leaves your device.
Data and Productivity↑↓ to navigate · Enter to open · Esc to close
Turn a CSV into a clear bar, line, pie or scatter chart and export it as PNG or SVG.
Runs in your browser. Nothing is uploaded — your input is processed on this device and discarded when you close the tab.
Cleaned data is waiting. The CSV Cleaning Studio left a cleaned CSV in this browser. You can chart it straight away — nothing is sent anywhere either way.
Drop a CSV file here or click to browse. The file is read on this device only. Data is capped at 5,000 cells (rows × columns) so charts stay honest and the tab stays responsive.
Pasted data is parsed exactly like an uploaded file, with the header option below.
When several rows share a label — three sales rows for “Jan”, say — aggregation decides how they become one bar or point.
The default palette is designed to stay distinguishable under the common forms of colour-vision deficiency.
Load data to draw a chart.
Exports are yours to use: charts you generate here may be used in documents, slides and reports, including commercially, with no attribution required. The 2× PNG renders at double resolution for print and retina slides; the transparent option removes the white background from both PNG and SVG exports.
Cells that are not numbers are highlighted, named in the warning above with their row and column, and excluded from the chart. Empty cells are skipped and counted separately.
A small shop exports six rows of sales data: one row per month per channel, with Sales and Returns columns. Charted raw, row by row, the file would draw six bars with the month labels repeated — hard to read and easy to misquote. Aggregated by month, it becomes a three-bar story. Load it with the tool itself:
The sample is already set up the way the example needs — Month as the label column, Sales ticked as the value, aggregation set to Sum — so the chart shows Jan 200, Feb 240 and Mar 280: January is 120 online plus 80 in store, February is 150 plus 90, and March is 170 plus 110. Switch the aggregation to Average and the same bars become 100, 120 and 140, the typical month per channel rather than the total. Now untick Sales, tick Returns instead, and keep Sum: the chart shows returns of 8 in January, 10 in February and 9 in March — the returns did not follow the sales climb in March, which is exactly the kind of pattern a raw six-bar chart hides. Tick both columns together for a two-series view, or sort by value, high to low, with Top N set to 2 to keep only February and March. The aggregated table under the chart always repeats the plotted numbers, so anything you quote from the picture can be checked against the table in seconds.
Most data that matters to a small team already exists as a CSV: the sales export, the survey download, the server log summary, the spreadsheet someone emailed. The hard part was never storing those numbers — it is seeing them. A column of forty figures communicates almost nothing; the same figures as bars make the largest, the smallest, the trend and the odd one out visible in about a second. That speed is not a cosmetic extra. People decide from the picture — in the meeting, in the report, in the funding deck — so a tool that turns a file into a defensible chart quickly, without an upload or an account, removes the two usual failure points: the chart that never gets made because the software was too heavy, and the chart that gets made carelessly because nobody checked what it actually plotted.
The step this builder treats as first-class is the one most quick chart tools skip: aggregation. Real exports are rarely one row per category. They are one row per transaction, per day, per channel — dozens of rows competing for the same label. Plotting them raw produces either a forest of overlapping bars or, worse, a chart that silently shows only some rows and looks authoritative while doing it. Here, every row for a label is combined by a rule you choose and can see — sum, average, count, minimum or maximum — and the aggregated table beneath the chart prints the resulting values in plain figures. If a number in a presentation is challenged, the defence is not “the tool said so”; it is a table anyone can recompute from the source file.
Honesty about bad data is built the same way. A cell containing “many”, “TBC” or a stray note cannot be plotted, so it is never quietly treated as zero — a substitution that would drag down averages and invent totals. Instead the cell is highlighted in the preview, named by row and column in a warning, counted, and excluded, while empty cells are skipped and counted separately. You keep the decision: fix the file (the CSV Cleaning Studio sits one step earlier in the workflow for exactly this), or accept the exclusion knowing precisely what it was.
Finally, the output respects where charts end up. The PNG suits slides and documents; the SVG is a genuine vector redraw of the chart’s data — bars, slices, lines and points as editable shapes — so it stays sharp in print and can be restyled later. The default palette is the Okabe–Ito set, designed to remain distinguishable for readers with colour-vision deficiency, because a chart that only works for some of its audience has only done some of its job. Everything runs in your browser: the file is never uploaded, which makes the tool safe for sales figures, internal metrics and other data that should not be pasted into a stranger’s server just to draw twelve bars.
No. The file is read and parsed in your browser with the PapaParse library, charted with the self-hosted Chart.js library, and discarded when you close the tab. Nothing is sent to a server and no copy is kept, which is why the tool is safe for sales exports, internal metrics and other files you would not hand to a third-party chart service.
Sum adds the numeric values in each group, so three January rows of 120, 80 and 30 become one bar of 230. Count ignores the values entirely and counts the rows, so the same group becomes a bar of 3 — the right choice when the question is “how many orders / sign-ups / tickets per month” rather than “how much”. Average, minimum and maximum summarise the values without adding them, which suits prices, ratings, temperatures and response times.
A cell is excluded when it sits in a charted value column but is not a number — words like “many” or “TBC”, stray notes, or mixed entries such as “12 approx”. Currency symbols, thousands commas and a trailing % are understood and parsed. The warning line above the preview names the first few excluded cells by row and column, the preview table highlights them, and the warning gives the full count. Empty cells are different: they are skipped silently as missing data, but still counted and reported separately.
The PNG is a pixel image of the chart exactly as drawn on screen — best for slides, documents and anywhere a picture is simply placed. The SVG is a standalone vector file redrawn from the chart’s aggregated data: bars, pie slices, lines and scatter points become editable SVG shapes with axes and a legend, so it scales to any size without blurring and can be restyled in a vector editor. Fine on-screen styling may differ slightly in the SVG; the data geometry — labels and values — is the same, and the aggregated table on this page is the authoritative record of both.
Use a bar chart to compare totals or averages across named categories — months, channels, products. Use a histogram when you have one numeric column and want to see how its values are distributed: how many orders fell between £0 and £10, £10 and £20, and so on. The histogram ignores labels, groups the values into equal-width bins you control (1–50), and counts the values per bin, which exposes skew, clusters and outliers that an average would flatten away.
Because aggregation, the preview table and the chart all run in your browser tab, the limit is your device’s responsiveness rather than a server plan. Five thousand cells cover the great majority of everyday exports while keeping every interaction instant. If your file is larger, the honest fix is usually upstream: remove columns you will never chart, or aggregate the export by day or by category first — a chart of 5,000 raw points would be unreadable long before it was slow.
Remove duplicates, fix missing values, standardise dates and export a clean CSV. Your file never leaves your device.
Data and ProductivityFormat, validate, minify, query and compare JSON in your browser, with precise line-and-column errors.
Developer ToolsTest patterns against sample text with match highlighting, capture groups and a safe one-second timeout.
Developer ToolsThe step most chart tools skip: aggregating rows before you chart them. Using the cleaned 10-row orders file, this guide builds the exact grouping tables — totals by category, by month, by city — shows the arithmetic, names the missing month the grouping produces, and matches each table to the chart type its shape calls for.
Choose a chart by the question, not by habit: comparison wants bars, trend wants a line, parts of a whole want few slices and honest percentages. One real dataset — order totals by city, every number computed from the same cleaned file — is presented three ways to show concretely where a pie chart misleads and a bar chart does not.
A step-by-step CSV cleaning workflow — delimiter and encoding first, then headers, whitespace, case, dates, missing values, duplicates and a formula-safe export — demonstrated on a deliberately messy 12-row file run through the CSV Cleaning Studio's own pipeline code, with its real change summary quoted.