I want to know the basic stats (max, min, mean, std) of my raster file. I use two different methods and get similar, but different results. I assume the results should be exactly the same with any method, is that right? What am I doing wrong?

Let' use this single band raster as test file.

Method 1 (gdal on python)

from osgeo import gdal

myRaster = 'path/to/input.tiff'
gtif = gdal.Open(myRaster)

srcband = gtif.GetRasterBand(1)
stats = srcband.GetStatistics(True, True)
print ('Minimum: %.3f\nMaximum: %.3f\nMean: %.3f\nStDev: %.3f' % (stats[0], stats[1], stats[2], stats[3]))

With Method 1 I get the following values:
Minimum: -63.630
Maximum: 132.033
Mean: 37.191
StDev: 42.380

Method 2 (gdalinfo from command line)
I simply use the command gdalinfo input.tiff -stats

I get the whole stats including:

This means that both methods result in the same Minimum value (-63.630 in both cases), but differ in the Maximum value (with concomitant differences in Mean and Standard Deviation). I read somewhere that there can be some problems with how to treat NaN values, but I am not sure this is the problem here.

Edit 00: I just tried the same using rasterio and it gives exactly the same values (for all 4 stats) as the command-line gdalinfo

  • 1
    Gdalinfo reads the statistics from the image metadata if possible. Check if you have an aux.xml file and delete it first. Then use gdal_edit with unsetstats option. That way it is sure that gdalinfo -stats is computing the statistics from the pixel data. Maybe the gdalinfo option -mm has the same effect but I am not sure gdal.org/programs/gdalinfo.html#cmdoption-gdalinfo-mm.
    – user30184
    Commented Sep 28, 2023 at 15:09

1 Answer 1


With your Python method by using the first "True" you ask GDAL to compute approximated statistics .

stats = srcband.GetStatistics(True, True)

See the documentation https://gdal.org/doxygen/classGDALRasterBand.html#a6aa58b6f0a0c17722b9bf763a96ff069


CPLErr GDALRasterBand::GetStatistics    (   int     bApproxOK,
int     bForce,
double *    pdfMin,
double *    pdfMax,
double *    pdfMean,
double *    pdfStdDev 
Fetch image statistics.

Returns the minimum, maximum, mean and standard deviation
of all pixel values in this band. If approximate statistics
are sufficient, the bApproxOK flag can be set to true in which
case overviews, or a subset of image tiles may be used in 
computing the statistics.

The gdalinfo command gdalinfo input.tiff -approx_stats returns the same numbers than what you got with Python, so obviously it is using the same method for computing the approximated statistics.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.