CSV Data Profiler & Column Analyzer
Paste or load a CSV-style file and choose its delimiter. Use the profile to spot data-cleaning issues before transforming the table.
Runs locally in your browser
Paste or load a CSV-style file and choose its delimiter. Use the profile to spot data-cleaning issues before transforming the table.
Runs locally in your browser
Paste delimited text or load a .csv, .tsv or .txt file and the page reports what is inside it: rows, columns, missing cells, duplicate rows and one line of statistics per column. The file is read in the page; profiling sent no network request in testing.
The profile is a snapshot of the text in the box. Edit the data or change the delimiter and press Profile data again — the tiles and the table are rebuilt from the current input.
Rows counts the data rows below the header and Columns counts the header cells. Missing cells adds up every empty or whitespace-only cell in the table, including the tail of rows that are shorter than the header. Duplicate rows counts rows whose parsed cells are identical to an earlier row: in the built-in example the repeated Sam row is one duplicate.
The filled values of a column are tested in a fixed order — boolean (true, false, yes, no), integer, number including scientific notation, ISO-8601 date, JSON — and anything that matches none of them is a string; a column with no values at all is typed empty. Every value has to match, so one stray value drops the column to string. Numeric columns report the real minimum, maximum and mean to two decimals; date columns report the earliest and latest date; text, JSON and boolean columns report the length of the shortest and longest value, marked "chars", with no average.
Fields may be quoted, a doubled quote inside a quoted field stays one quote, and a quoted field may contain the delimiter or a line break; a leading byte-order mark is ignored. Empty headers become column_3, repeated headers become a and a_2, and cells past the last header are dropped. Blank lines inside the data count as rows of empty cells. If the input has no header plus a data row, or a quoted field is never closed, the status line reports it and the previous profile is cleared instead of being left on screen. Profiling 20,000 rows by 4 columns (486 KB) took 76 ms in Chrome during testing, and 50,000 rows took 196 ms.
No. The profiler runs in the page with JavaScript; during testing it issued no request while reading a local file and producing a profile. Nothing is stored, and the tool keeps working after the page has loaded even without a network connection. The only file it writes is the JSON you ask for with Download.
Auto-detect tries comma, tab, semicolon and pipe and keeps the one that splits the first 25 rows into the most consistent number of fields. If the profile shows 1 column for a file that clearly has several, set the separator yourself — a wrong forced delimiter is not flagged as an error, the whole line simply becomes one column.
For text there is no meaningful smallest value, so the table reports the length of the shortest and longest entry instead; "3 chars" means every filled value in that column is three characters long. Numeric columns show real numbers, date columns show the earliest and latest date, and the Average column stays "—" whenever the column is not numeric.
Two rows are duplicates when every parsed cell matches, including empty cells and column order: the line 3,Sam,Platform,,false twice is one duplicate. Values are compared exactly, so "sam" and "Sam" are different and extra spaces are not trimmed.
Testing profiled 20,000 rows by 4 columns (486 KB) in 76 ms and 50,000 rows in 196 ms, all inside the page. The tab is the limit rather than a server quota; for files in the hundreds of megabytes a command-line tool is the better instrument.