CSV Column Stats
Paste CSV data and instantly get per-column statistics: count, null count, unique values, min, max, mean, median, and standard deviation. No upload required.
When CSV column stats are the right tool
Use this page when you have one headered CSV table and you want a quick profile of each column: how many rows, how many blanks, how many distinct values, the range, and — when every non-empty cell is numeric — a mean, median, and standard deviation. Paste the text, click Analyze, and expand a column for its top five values. Nothing is uploaded.
It is not a spreadsheet, a pivot table, or a validator. It will not chart the data, infer booleans or dates as types, or compare two files. For a comparison use CSV Diff. For a conversion use CSV ↔ JSON or CSV ↔ YAML.
Use cases
Checking a spreadsheet export before you share it
After exporting a table, Analyze will show whether a supposedly numeric column is mixed because of a typo, how many cells are empty or literally NA, and which values appear most often. The preloaded sample is a ten-row name, age, city, score, and active table; Load Sample restores it if you have overwritten the box.
Spotting missing values and messy types
Null counts are highlighted when they are not zero. A column that looks numeric in a spreadsheet can still be mixed here if even one non-null cell fails to parse as a number. Flag columns such as true / false stay strings, so they get lexicographic min and max rather than a mean.
A first pass on unique values
Unique counts ignore nulls. Details shows up to five values, ordered by frequency, with ties kept in the order those values first appeared. That is enough to see a repeated city or a dominant flag; it is not a full value-counts table.
How the analysis works
The input is trimmed and split on newlines. You need a header line and at least one later line, or Analyze reports that the CSV could not be parsed. Empty data lines are dropped. Headers are trimmed. Each remaining line is split on commas, except inside double quotes; a doubled quote inside a quoted field becomes a literal quote. There is no tab or semicolon option.
Count is the number of data rows after empty lines are removed, and it is the same for every column even when a row is short. A missing cell is treated as empty, which counts as null. Type, unique counts, top values, and numeric summaries all ignore nulls. On a number column, min and max come from the parsed numbers, so a cell written 95.0 can appear as 95; the top-values list keeps the original text.
name,age,city,score,active
Alice,28,New York,92.5,true
Bob,34,London,78.0,false
Hank,,Tokyo,,false
After Analyze, the age column reports:
type number · count 3 · null 1 · unique 2
min 28 · max 34 · mean 31 · median 31 · std dev 3Hank’s blank age is a null, so it does not enter the mean. The preloaded ten-row sample behaves the same way: age and score each have one blank (Hank), age is a number with mean 33.8889, and active is a string whose top values are true (6) and false (4).
What this tool does not do
It does not update as you type, chart anything, treat n/a as null, compute a sample standard deviation, or parse quoted fields that span lines. It does not send data to a server. For converting the same table to another format, use the CSV converters linked above.
How to use CSV Column Stats
- Paste a CSV table whose first row is the header, or use the preloaded sample.
- Click Analyze. The summary line reports how many columns and rows were read.
- Scan the table, then open Details on a column to see its top values.
- Use Load Sample to restore the example text, then Analyze again if you want the table recomputed.
Frequently asked questions
What does Analyze calculate for each column?
Every column gets a type (number, string, or mixed), a row count, a null count, a unique count of non-null values, min, max, and the top five values by frequency. Mean, median, and standard deviation appear only on number columns. String and mixed columns show lexicographic min and max, and use a dash for the numeric summaries.
What counts as a null value?
After trimming, an empty cell, the literal text null, or the literal text na (any capitalization) is treated as null. Those cells are excluded from unique counts, top values, type detection, and numeric summaries. Spellings such as n/a or N/A are not treated as null — they stay as ordinary strings and can make a mostly numeric column mixed.
How is a column typed as number, string, or mixed?
A column is a number if every non-null cell parses as a JavaScript Number (and there is at least one non-null cell). It is mixed if some non-null cells are numeric and some are not. Otherwise it is a string. Values such as true and false are strings, not booleans, so a flag column is typed as string.
How are mean, median, and standard deviation computed?
They use only non-null numeric values. The mean and an even-length median (the average of the two middle values) are shown with up to four decimal places, with trailing zeros stripped. An odd-length median is the middle value as-is. Standard deviation is the population statistic: the square root of the variance divided by n, not by n − 1. On the preloaded sample, age has one blank, so n is 9, the mean is 33.8889, the median is 31, and the standard deviation is 9.1826.
Does the parser handle quoted commas, multiline fields, or other delimiters?
Quoted commas and doubled quotes inside a field are parsed on a single line. A quoted field that contains a newline will split across rows, because the reader processes one line at a time. Tabs and semicolons are not treated as delimiters — only commas are. Short rows get empty cells, which count as null; extra cells past the header are ignored.
Do the statistics update as I type?
No. You have to click Analyze. The page starts with a ten-row sample already in the box, but the table stays empty until you analyze it. Load Sample restores that text and does not run Analyze for you. Editing the input after a run also leaves the previous table in place until you analyze again. There is no Clear button.
Is my CSV uploaded to a server?
No. Parsing and statistics run entirely in your browser. Closing the tab discards what you pasted. Do not paste spreadsheets that contain personal data or secrets if you would not be comfortable with them sitting in memory on this device.
Related tools and guides
References
- RFC 4180 describes CSV fields that may contain commas and newlines. This page honors quoted commas on a single line, but it does not reassemble a quoted field that spans lines.
- The standard deviation here is the population form (divide by n). Spreadsheet STDEV or Python statistics.stdev often use the sample form (divide by n − 1) and will not match these numbers exactly.