Clean Numbers in a CSV
A column of money that will not sum is almost always a column of strings. $1,234.50, (45), 12%, 1 234,50 and 3.5 kg are all numbers wearing formatting a spreadsheet put on them, and every tool downstream reads them as text. This takes the formatting off and leaves the number — and tells you, column by column, where it could not.
How to clean numbers in a CSV
- Paste the CSV or drop a file. By default every column where every value converts is cleaned, and the rest are left exactly as they are.
- Read the report under the panes. It shows, per column, how many values converted and gives you examples of the ones that did not — usually
n/a,—, or a stray footnote. - Pick a single column from the dropdown if you want to be specific, or (all columns) to attempt everything.
- Set decimals if you want a fixed number of places; leave it blank to keep whatever precision each value had.
- Copy or download. The file never leaves your browser.
What counts as formatting
- Currency symbols anywhere in the value:
$,€,£,¥,₴and the rest of the Unicode currency block. - Thousands separators — commas, dots, apostrophes (the Swiss
1'234) and spaces, including the narrow no-break space Excel likes to use. - Accounting negatives.
(1,234.50)is −1234.5. Brackets are how finance writes a minus sign and nothing downstream knows that. - Percent signs, either dropped or divided by 100 — your choice, because both are what somebody means.
- A trailing unit, off by default:
3.5 kg→3.5. Off because a unit is usually information, and losing it silently is how a column of kilograms gets added to a column of pounds.
How the decimal mark is decided
This is the part that quietly ruins data, so here is the exact rule. On detect, only the
last separator in a value can be a decimal mark, and it only counts as one when the
digits after it are not a group of exactly three. So 1,234 is one thousand two
hundred and thirty-four, not 1.234 — because three trailing digits is what grouping looks like, and
reading it the other way divides the value by a thousand without saying anything.
1.234,56 and 1,234.56 are both unambiguous and both come out as 1234.56.
1 234,5 is unambiguous too. Where you have a column that really does hold values like
1,234 meaning 1.234, set the decimal mark explicitly rather than trusting the guess.
Why a column is all-or-nothing
The default refuses to convert a column unless every non-blank value in it converts. That sounds
strict and it is the whole point: a column where 999 values are prices and one is n/a
is not a numeric column, and cleaning the 999 leaves you with a column that looks numeric, sorts
wrong, and averages wrong — with no sign that anything happened.
When the report tells you which values blocked a column, you can decide: fix them at the source, blank them out with find & replace, or switch the last dropdown to clean what converts if you genuinely want a mixed column. Blank cells never block anything — they stay blank.
What it will not do
- It will not parse dates.
2026-03-04is left alone. Use CSV date format for those. - It will not touch leading zeros in a non-numeric column. A column of
007-style codes converts to7only if you point the tool at it explicitly — the automatic pass skips columns where cleaning would change nothing but the zeros. - It does not round unless you ask. Leave decimals blank and
1,234.50comes out as1234.5— the trailing zero was formatting too. Set it to 2 to keep it. - It does not convert scientific notation to expanded form or vice versa.
1.5e3is already a number every parser reads.
Privacy
100% client-side. Parsing and cleaning happen in this page; nothing is uploaded. See the privacy policy.