Skip to content

CSV statistics: mean, standard deviation, min and max

Mean, std dev, min and max of each column, in your browser. Nothing is uploaded.

Open a CSV to see its statistics

Drop it here or choose a file. The statistics of every number column open as soon as it is read.

The sample: a year of made-up hourly weather in Leeds, 8,760 rows.

Tip: drop several files to compare them.

Your file never leaves your device. It is read and charted by your browser. Nothing is uploaded.

Opens with the statistics of your number columns

Columns
The file’s number columns ticked, in the file’s order, up to eight (the chart shows them too).
Rows
The rows in view, which is every row until you zoom in.
Statistics
Count, missing, min, max, mean, median, standard deviation (n − 1), RMS, peak to peak, the quartiles and the IQR, to seven significant digits.

At a glance

Statistics
Count, missing values, min, max, mean, median, standard deviation, RMS, peak to peak, the quartiles and the IQR of each number column ticked, up to eight at once.
Standard deviation
The sample one (divided by n − 1), as MATLAB’s std and Excel’s STDEV.
Median and quartiles
As NumPy and pandas give them (interpolated linearly, like Excel’s QUARTILE.INC); a box plot draws them for each column.
For which rows
The rows in view (zoom the chart into a part), the whole file, or the rows between two cursors.
Text columns
“Show statistics” in a column’s menu in the table: its count, missing values, distinct values and the most common ones.
Precision
Every value is used, millions of rows too; the panel shows seven significant digits.
Accuracy
Checked against NumPy by our own tests, with the worked example on this page.
Files
CSV, TSV, TXT, Excel, JSON, MATLAB, Parquet, HDF5 and LabVIEW TDMS files.
Processing
Calculated in your browser. Your file is never uploaded.
Price
Free. No account or sign-up.

How to get the statistics of a CSV file

  1. Open your file. Choose a CSV, TSV, TXT, Excel, JSON, MATLAB, Parquet, HDF5 or LabVIEW TDMS file, or drop it on the tool at the top of this page. No file to hand? Click “Try a sample weather file”.
  2. Read the statistics. The statistics panel opens as soon as the file is read, with a card for each number column, up to eight. Tick or untick columns in the list on the left to choose which.
  3. Choose the rows. The panel starts on “Visible range”, the rows the chart shows: zoom the chart into a part and the numbers follow. “Whole file” covers every row; with the difference cursors on, “Between cursors” covers the rows between them.

A worked example you can check

“Try a sample weather file” opens a made-up year of hourly weather in Leeds: 8,760 rows, with temperature, humidity, wind speed and rainfall, and no wind readings on 12 March, when the anemometer was serviced. The statistics panel opens with these numbers, for the whole year:

What the statistics panel shows
StatisticTemperature [°C]Humidity [%]Wind Speed [mph]Rainfall [mm]
Count8,7608,7608,7368,760
Missing00240
Min-3.335300
Max21.8810028.64.3
Mean9.5655980.0576510.75530.06754566
Median9.988010.60
Std dev5.2075298.3028494.7829050.2929439
RMS10.8910980.48711.770730.3006139
Peak to peak25.214728.64.3
Q1 (25%)5.7075747.40
Q3 (75%)13.40258613.90
IQR7.695126.50

The wind speed counts 8,736 values and 24 missing ones: the 24 hours of 12 March. Its mean and standard deviation leave them out, rather than counting them as zero. The rainfall’s median and quartiles are 0: at least three hours in four are dry. Zoom the chart into January and every card shows January’s numbers instead.

The same in Python

With the sample file downloaded, these lines give pandas’ answer (skiprows=[1] skips the units row; pandas’ std divides by n − 1, as the panel does, and its quantile interpolates as the panel’s Q1, median and Q3 do):

import pandas as pd

d = pd.read_csv("megarows-sample-leeds-hourly-weather.csv", skiprows=[1])
x = d.drop(columns="time")
table = pd.DataFrame({"count": x.count(), "mean": x.mean(), "std": x.std(),
                      "min": x.min(), "max": x.max(), "rms": (x**2).mean() ** 0.5})
print(table.round(3).to_string())
print(x.quantile([0.25, 0.5, 0.75]).T.round(3).to_string())

They print, rounded to three decimals:

                   count    mean    std    min     max     rms
Leeds_Temperature   8760   9.566  5.208  -3.33   21.88  10.891
Leeds_Humidity      8760  80.058  8.303  53.00  100.00  80.487
Leeds_Wind_Speed    8736  10.755  4.783   0.00   28.60  11.771
Leeds_Rainfall      8760   0.068  0.293   0.00    4.30   0.301
                     0.25   0.50    0.75
Leeds_Temperature   5.708   9.98  13.402
Leeds_Humidity     74.000  80.00  86.000
Leeds_Wind_Speed    7.400  10.60  13.900
Leeds_Rainfall      0.000   0.00   0.000

We ran them on 9 October 2026 with numpy 2.1.3, pandas 2.2.3, Python 3.12.15. A test works out the panel’s numbers on every change to the site and checks that they are the ones on this page and that they match NumPy’s to about 12 significant digits. Download the sample file (CSV, 299 KB).

What each statistic means

Count
The values that are there; empty cells are left out of every other statistic.
Missing
Empty cells, and markers such as NA or n/a, with their share of the rows.
Min and Max
The smallest and the largest value.
Mean
The sum of the values divided by the count.
Median
The middle value once the values are sorted; with an even count, halfway between the middle two. Half the values are below it, half above.
Std dev
The sample standard deviation: the square root of the sum of squared differences from the mean, divided by n − 1, as MATLAB’s std and Excel’s STDEV. 0 for a single value.
RMS
The root mean square: the square root of the mean of the squared values. For a signal that swings around zero, its typical size.
Peak to peak
Max minus min.
Q1 and Q3
The quartiles: a quarter of the values lie below Q1 and a quarter above Q3. Between two values they are interpolated linearly, as NumPy, pandas and Excel’s QUARTILE.INC do; MATLAB’s quantile uses another rule, so for a few values its Q1 and Q3 can differ slightly (the median is the same).
IQR
The interquartile range, Q3 minus Q1: the spread of the middle half of the values, which a few extreme values do not move.

For the rows in view, the whole file or between cursors

The panel has three choices. Visible range, the default, covers the rows the chart shows: drag across the chart to zoom into a part (or use the scroll wheel, or a pinch on a touch screen), and the numbers follow once the chart rests. Whole file covers every row, whatever the zoom. Between cursors appears when the difference cursors are on (the cursor button over the chart, or the D key): it covers the rows from cursor C1 to C2, which you can drag to an exact time.

Whatever the choice, every value in the range is used at full precision, millions of rows too: the chart may draw an overview of a long file, but the statistics never come from it.

Text and category columns

Columns of text, such as a station name or a status, have no mean. Choose Show statistics in the column’s menu in the table: the panel shows its count, missing values, the number of distinct values and the most common ones, over the whole file.

Checked against NumPy

The same numbers as NumPy and pandas. On every change to the site, our own tests work out the panel’s numbers for the worked example above and for the sample signal of our accuracy page, and compare them with NumPy’s, standard deviation (n − 1) included. See every check.

Private by design: nothing is uploaded

Measurement and business data are often confidential. This tool reads your file and works out the statistics in your browser, so the file and its name never leave your device. Files with millions of rows work: the practical limit is your device’s memory.

Next steps with your data

Frequently asked questions

How do I get the statistics of a CSV file?

Open the file in the tool at the top of this page. The statistics panel opens by itself with a card for each number column, up to eight: count, missing values, min, max, mean, median, standard deviation, RMS, peak to peak, the quartiles Q1 and Q3, and the IQR.

Is the standard deviation the sample or the population one?

The sample one, divided by n − 1, the same as MATLAB’s std, Excel’s STDEV and pandas’ std. NumPy’s std divides by n unless you pass ddof=1, which is why it can differ slightly for short columns.

Does it give the median and quartiles?

Yes: the median, Q1, Q3 and the IQR of every number column, for the rows in view, the whole file or between the cursors, the same as NumPy’s and pandas’ quantile. To see them as a picture, switch a chart to a box plot: one box per column, with its whiskers and outliers.

Can I get the statistics of part of the file?

Yes. The panel starts on “Visible range”: zoom the chart into a time range and the numbers are for that range. For an exact span, switch on the difference cursors, place them, and choose “Between cursors”. “Whole file” always covers every row.

What about text columns?

Choose “Show statistics” in a text column’s menu in the table: the panel shows its count, missing values, how many distinct values it has and the most common ones.

Does it work on big files?

Yes. The statistics use every row, at full precision, also for files with millions of rows; the practical limit is your device’s memory. The panel rounds what it shows to seven significant digits.

Is my file uploaded?

No. The file is read and the statistics are calculated by your browser, on your own device. Neither the file nor its name is sent anywhere; you can check it in the Network tab of your browser’s developer tools.

Coming soon to MegaRows: CSV to Excel and PDF reports · Compare CSV versions.

MegaRows processes files locally in your browser. Nothing is uploaded, not even the file name.