RGI-TOPO for RGI 7.0#

OGGM was used to generate the topography data used to compute the topographical attributes and the centerlines products for RGI v7.0.

Here we show how to access this data from OGGM.

Input parameters#

This notebook can be run as a script with parameters using papermill, but it is not necessary. The following cell contains the parameters you can choose from:

# The RGI-id of the glaciers you want to look for
# Use the original shapefiles or the GLIMS viewer to check for the ID: https://www.glims.org/maps/glims
rgi_id = 'RGI2000-v7.0-G-01-06486'  # Denali

# The default is to test for all sources available for this glacier
# Set to a list of source names to override this
sources = None
# Where to write the plots. Default is in the current working directory
plot_dir = f'outputs/{rgi_id}'
# The RGI version to use
# V62 is an unofficial modification of V6 with only minor, backwards compatible modifications
prepro_rgi_version = 62
# Size of the map around the glacier. Currently only 10 and 40 are available
prepro_border = 10
# Degree of processing level.  Currently only 1 is available.
from_prepro_level = 1

Check input and set up#

# The sources can be given as parameters
if sources is not None and isinstance(sources, str):
    sources = sources.split(',')
# Plotting directory as well
if not plot_dir:
    plot_dir = './' + rgi_id
import os
plot_dir = os.path.abspath(plot_dir)
from oggm import cfg, utils, workflow, tasks, graphics, GlacierDirectory
import pandas as pd
import numpy as np
import xarray as xr
import rioxarray as rioxr
import geopandas as gpd
import salem
import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1 import AxesGrid
import itertools

from oggm.utils import DEM_SOURCES
from oggm.workflow import init_glacier_directories
# Make sure the plot directory exists
utils.mkdir(plot_dir);
# Use OGGM to download the data
cfg.initialize()
cfg.PATHS['working_dir'] = utils.gettempdir(dirname='OGGM-RGITOPO-RGI7', reset=True)
cfg.PARAMS['use_intersects'] = False
2026-05-15 17:18:49: oggm.cfg: Reading default parameters from the OGGM `params.cfg` configuration file.
2026-05-15 17:18:49: oggm.cfg: Multiprocessing switched OFF according to the parameter file.
2026-05-15 17:18:49: oggm.cfg: Multiprocessing: using all available processors (N=4)
2026-05-15 17:18:49: oggm.cfg: PARAMS['use_intersects'] changed from `True` to `False`.

Download the data using OGGM utility functions#

Note that you could reach the same goal by downloading the data manually from

# URL of the preprocessed GDirs
gdir_url = 'https://cluster.klima.uni-bremen.de/~oggm/gdirs/oggm_v1.6/rgitopo/2026.1/all_dems/'
# We use OGGM to download the data
gdir = init_glacier_directories([rgi_id], from_prepro_level=1, prepro_border=10,  prepro_rgi_version='70G', prepro_base_url=gdir_url)[0]
2026-05-15 17:18:50: oggm.workflow: init_glacier_directories from prepro level 1 on 1 glaciers.
2026-05-15 17:18:50: oggm.workflow: Execute entity tasks [gdir_from_prepro] on 1 glaciers
2026-05-15 17:18:50: oggm.utils: Downloading https://cluster.klima.uni-bremen.de/~oggm/gdirs/oggm_v1.6/rgitopo/2026.1/all_dems/RGI70G/b_010/L1/RGI2000-v7.0-G-01/RGI2000-v7.0-G-01-06.tar to /github/home/OGGM/download_cache/cluster.klima.uni-bremen.de/~oggm/gdirs/oggm_v1.6/rgitopo/2026.1/all_dems/RGI70G/b_010/L1/RGI2000-v7.0-G-01/RGI2000-v7.0-G-01-06.tar...
gdir
<oggm.GlacierDirectory>
  RGI id: RGI2000-v7.0-G-01-06486
  Region: 01: Alaska
  Subregion: 01-02: Alaska Range (Wrangell/Kilbuck)
  Glacier type: Glacier
  Terminus type: Not assigned
  Status: Glacier
  Area: 0.961122833004822 km2
  Lon, Lat: (-151.0094740399913, 63.061062)
  Grid (nx, ny): (70, 88)
  Grid (dx, dy): (24.0, -24.0)

Read the DEMs and store them all in a dataset#

if sources is None:
    sources = [src for src in os.listdir(gdir.dir) if src in utils.DEM_SOURCES]
print('RGI ID:', rgi_id)
print('Available DEM sources:', sources)
print('Plotting directory:', plot_dir)
RGI ID: RGI2000-v7.0-G-01-06486
Available DEM sources: ['TANDEM', 'MAPZEN', 'AW3D30', 'ALASKA', 'ASTER', 'ARCTICDEM', 'DEM3', 'COPDEM90', 'COPDEM30']
Plotting directory: /__w/tutorials/tutorials/notebooks/tutorials/outputs/RGI2000-v7.0-G-01-06486
# We use xarray to store the data
ods = xr.Dataset()
for src in sources:
    demfile = os.path.join(gdir.dir, src) + '/dem.tif'
    with rioxr.open_rasterio(demfile) as ds:
        data = ds.sel(band=1).load() * 1.
        ods[src] = data.where(data > -100, np.nan)

    sy, sx = np.gradient(ods[src], gdir.grid.dx, gdir.grid.dx)
    ods[src + '_slope'] = ('y', 'x'),  np.arctan(np.sqrt(sy**2 + sx**2))

with rioxr.open_rasterio(gdir.get_filepath('glacier_mask')) as ds:
    ods['mask'] = ds.sel(band=1).load()
# Decide on the number of plots and figure size
ns = len(sources)
x_size = 12
n_cols = 3
n_rows = -(-ns // n_cols)
y_size = x_size / n_cols * n_rows

Raw topography data#

smap = salem.graphics.Map(gdir.grid, countries=False)
smap.set_shapefile(gdir.read_shapefile('outlines'))
smap.set_plot_params(cmap='topo')
smap.set_lonlat_contours(add_tick_labels=False)
smap.set_plot_params(vmin=np.nanquantile([ods[s].min() for s in sources], 0.25),
                     vmax=np.nanquantile([ods[s].max() for s in sources], 0.75))

fig = plt.figure(figsize=(x_size, y_size))
grid = AxesGrid(fig, 111,
                nrows_ncols=(n_rows, n_cols),
                axes_pad=0.7,
                cbar_mode='each',
                cbar_location='right',
                cbar_pad=0.1
                )

for i, s in enumerate(sources):
    data = ods[s]
    smap.set_data(data)
    ax = grid[i]
    smap.visualize(ax=ax, addcbar=False, title=s)
    if np.isnan(data).all():
        grid[i].cax.remove()
        continue
    cax = grid.cbar_axes[i]
    smap.colorbarbase(cax)

# take care of uneven grids
if ax != grid[-1] and not grid[-1].title.get_text():
    grid[-1].remove()
    grid[-1].cax.remove()
if ax != grid[-2] and not grid[-2].title.get_text():
    grid[-2].remove()
    grid[-2].cax.remove()

plt.savefig(os.path.join(plot_dir, 'dem_topo_color.png'), dpi=150, bbox_inches='tight')
../../_images/1dd5ce5655e66e48b1b5339669e0b09abf2a595b4d304de73eeaaacf97b73b67.png

Shaded relief#

fig = plt.figure(figsize=(x_size, y_size))
grid = AxesGrid(fig, 111,
                nrows_ncols=(n_rows, n_cols),
                axes_pad=0.7,
                cbar_location='right',
                cbar_pad=0.1
                )
smap.set_plot_params(cmap='Blues')
smap.set_shapefile()
for i, s in enumerate(sources):
    data = ods[s].copy().where(np.isfinite(ods[s]), 0)
    smap.set_data(data * 0)
    ax = grid[i]
    smap.set_topography(data)
    smap.visualize(ax=ax, addcbar=False, title=s)

# take care of uneven grids
if ax != grid[-1] and not grid[-1].title.get_text():
    grid[-1].remove()
    grid[-1].cax.remove()
if ax != grid[-2] and not grid[-2].title.get_text():
    grid[-2].remove()
    grid[-2].cax.remove()

plt.savefig(os.path.join(plot_dir, 'dem_topo_shade.png'), dpi=150, bbox_inches='tight')
../../_images/3261aab86a90ef529d0c99120509ea65cf91b41b1d138f621d1c1e75cc106f35.png

Slope#

fig = plt.figure(figsize=(x_size, y_size))
grid = AxesGrid(fig, 111,
                nrows_ncols=(n_rows, n_cols),
                axes_pad=0.7,
                cbar_mode='each',
                cbar_location='right',
                cbar_pad=0.1
                )

smap.set_topography()
smap.set_plot_params(vmin=0, vmax=0.7, cmap='Blues')

for i, s in enumerate(sources):
    data = ods[s + '_slope']
    smap.set_data(data)
    ax = grid[i]
    smap.visualize(ax=ax, addcbar=False, title=s + ' (slope)')
    cax = grid.cbar_axes[i]
    smap.colorbarbase(cax)

# take care of uneven grids
if ax != grid[-1] and not grid[-1].title.get_text():
    grid[-1].remove()
    grid[-1].cax.remove()
if ax != grid[-2] and not grid[-2].title.get_text():
    grid[-2].remove()
    grid[-2].cax.remove()

plt.savefig(os.path.join(plot_dir, 'dem_slope.png'), dpi=150, bbox_inches='tight'):
  Cell In[14], line 29
    plt.savefig(os.path.join(plot_dir, 'dem_slope.png'), dpi=150, bbox_inches='tight'):
                                                                                      ^
SyntaxError: invalid syntax

Some simple statistics about the DEMs#

df = pd.DataFrame()
for s in sources:
    df[s] = ods[s].data.flatten()[ods.mask.data.flatten() == 1]

dfs = pd.DataFrame()
for s in sources:
    dfs[s] = ods[s + '_slope'].data.flatten()[ods.mask.data.flatten() == 1]
dfs = df.describe()
dfs.loc['range'] = dfs.loc['max'] - dfs.loc['min']
dfs
TANDEM MAPZEN AW3D30 ALASKA ASTER ARCTICDEM DEM3 COPDEM90 COPDEM30
count 1671.000000 1671.000000 0.0 1671.000000 1671.000000 767.000000 1671.000000 1671.000000 1671.000000
mean 5153.806152 5319.226212 NaN 5316.735352 5295.587672 5529.413086 5328.549372 5277.694824 5277.514160
std 388.357605 350.840381 NaN 351.459656 351.229245 393.222046 351.724101 370.293671 370.142792
min 4497.636719 4622.000000 NaN 4610.906738 4565.000000 4871.422852 4644.000000 4584.852539 4585.657715
25% 4837.172607 5050.000000 NaN 5047.515381 5026.500000 5111.490234 5058.000000 4980.320312 4982.135010
50% 5044.266113 5258.000000 NaN 5255.337402 5250.000000 5613.539551 5259.000000 5231.637207 5231.779785
75% 5441.289551 5578.500000 NaN 5578.190430 5543.000000 5869.918945 5590.000000 5564.726562 5562.813232
max 5975.219727 6111.000000 NaN 6116.865234 6113.000000 6126.963379 6120.000000 6073.276855 6073.898438
range 1477.583008 1489.000000 NaN 1505.958496 1548.000000 1255.540527 1476.000000 1488.424316 1488.240723

Comparison matrix plot#

# Table of differences between DEMS
df_diff = pd.DataFrame()
done = []
for s1, s2 in itertools.product(sources, sources):
    if s1 == s2:
        continue
    if (s2, s1) in done:
        continue
    df_diff[s1 + '-' + s2] = df[s1] - df[s2]
    done.append((s1, s2))
# Decide on plot levels
max_diff = df_diff.quantile(0.99).max()
base_levels = np.array([-8, -5, -3, -1.5, -1, -0.5, -0.2, -0.1, 0, 0.1, 0.2, 0.5, 1, 1.5, 3, 5, 8])
if max_diff < 10:
    levels = base_levels
elif max_diff < 100:
    levels = base_levels * 10
elif max_diff < 1000:
    levels = base_levels * 100
else:
    levels = base_levels * 1000
levels = [l for l in levels if abs(l) < max_diff]
if max_diff > 10:
    levels = [int(l) for l in levels]
levels
[-300, -150, -100, -50, -20, -10, 0, 10, 20, 50, 100, 150, 300]
smap.set_plot_params(levels=levels, cmap='PuOr', extend='both')
smap.set_shapefile(gdir.read_shapefile('outlines'))

fig = plt.figure(figsize=(14, 14))
grid = AxesGrid(fig, 111,
                nrows_ncols=(ns - 1, ns - 1),
                axes_pad=0.3,
                cbar_mode='single',
                cbar_location='right',
                cbar_pad=0.1
                )
done = []
for ax in grid:
    ax.set_axis_off()
for s1, s2 in itertools.product(sources, sources):
    if s1 == s2:
        continue
    if (s2, s1) in done:
        continue
    data = ods[s1] - ods[s2]
    ax = grid[sources.index(s1) * (ns - 1) + sources[1:].index(s2)]
    ax.set_axis_on()
    smap.set_data(data)
    smap.visualize(ax=ax, addcbar=False)
    done.append((s1, s2))
    ax.set_title(s1 + '-' + s2, fontsize=8)

cax = grid.cbar_axes[0]
smap.colorbarbase(cax);

plt.savefig(os.path.join(plot_dir, 'dem_diffs.png'), dpi=150, bbox_inches='tight')
../../_images/aaf64e3ca1af6c0fc9de99f542bbbbdd2e24fa8eaa1b54e1475c2aeda214633c.png

Comparison scatter plot#

import seaborn as sns
sns.set(style="ticks")

l1, l2 = (utils.nicenumber(df.min().min(), binsize=50, lower=True),
          utils.nicenumber(df.max().max(), binsize=50, lower=False))

def plot_unity():
    points = np.linspace(l1, l2, 100)
    plt.gca().plot(points, points, color='k', marker=None,
                   linestyle=':', linewidth=3.0)

g = sns.pairplot(df.dropna(how='all', axis=1).dropna(), plot_kws=dict(s=50, edgecolor="C0", linewidth=1));
g.map_offdiag(plot_unity)
for asx in g.axes:
    for ax in asx:
        ax.set_xlim((l1, l2))
        ax.set_ylim((l1, l2))

plt.savefig(os.path.join(plot_dir, 'dem_scatter.png'), dpi=150, bbox_inches='tight')
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
Cell In[20], line 13
      9     plt.gca().plot(points, points, color='k', marker=None,
     10                    linestyle=':', linewidth=3.0)
     11 
     12 g = sns.pairplot(df.dropna(how='all', axis=1).dropna(), plot_kws=dict(s=50, edgecolor="C0", linewidth=1));
---> 13 g.map_offdiag(plot_unity)
     14 for asx in g.axes:
     15     for ax in asx:
     16         ax.set_xlim((l1, l2))

File /usr/local/pyenv/versions/3.13.13/lib/python3.13/site-packages/seaborn/axisgrid.py:1425, in PairGrid.map_offdiag(self, func, **kwargs)
   1414 """Plot with a bivariate function on the off-diagonal subplots.
   1415 
   1416 Parameters
   (...)   1422 
   1423 """
   1424 if self.square_grid:
-> 1425     self.map_lower(func, **kwargs)
   1426     if not self._corner:
   1427         self.map_upper(func, **kwargs)

File /usr/local/pyenv/versions/3.13.13/lib/python3.13/site-packages/seaborn/axisgrid.py:1395, in PairGrid.map_lower(self, func, **kwargs)
   1384 """Plot with a bivariate function on the lower diagonal subplots.
   1385 
   1386 Parameters
   (...)   1392 
   1393 """
   1394 indices = zip(*np.tril_indices_from(self.axes, -1))
-> 1395 self._map_bivariate(func, indices, **kwargs)
   1396 return self

File /usr/local/pyenv/versions/3.13.13/lib/python3.13/site-packages/seaborn/axisgrid.py:1574, in PairGrid._map_bivariate(self, func, indices, **kwargs)
   1572     if ax is None:  # i.e. we are in corner mode
   1573         continue
-> 1574     self._plot_bivariate(x_var, y_var, ax, func, **kws)
   1575 self._add_axis_labels()
   1577 if "hue" in signature(func).parameters:

File /usr/local/pyenv/versions/3.13.13/lib/python3.13/site-packages/seaborn/axisgrid.py:1583, in PairGrid._plot_bivariate(self, x_var, y_var, ax, func, **kwargs)
   1581 """Draw a bivariate plot on the specified axes."""
   1582 if "hue" not in signature(func).parameters:
-> 1583     self._plot_bivariate_iter_hue(x_var, y_var, ax, func, **kwargs)
   1584     return
   1586 kwargs = kwargs.copy()

File /usr/local/pyenv/versions/3.13.13/lib/python3.13/site-packages/seaborn/axisgrid.py:1659, in PairGrid._plot_bivariate_iter_hue(self, x_var, y_var, ax, func, **kwargs)
   1657         func(x=x, y=y, **kws)
   1658     else:
-> 1659         func(x, y, **kws)
   1661 self._update_legend_data(ax)

TypeError: plot_unity() got an unexpected keyword argument 'color'
../../_images/27f8f32afd8c9fdc3e6df7a9d3e83a142c5e7d4a9bceb5afcdde2300157e8381.png

Table statistics#

df.describe()
TANDEM MAPZEN AW3D30 ALASKA ASTER ARCTICDEM DEM3 COPDEM90 COPDEM30
count 1671.000000 1671.000000 0.0 1671.000000 1671.000000 767.000000 1671.000000 1671.000000 1671.000000
mean 5153.806152 5319.226212 NaN 5316.735352 5295.587672 5529.413086 5328.549372 5277.694824 5277.514160
std 388.357605 350.840381 NaN 351.459656 351.229245 393.222046 351.724101 370.293671 370.142792
min 4497.636719 4622.000000 NaN 4610.906738 4565.000000 4871.422852 4644.000000 4584.852539 4585.657715
25% 4837.172607 5050.000000 NaN 5047.515381 5026.500000 5111.490234 5058.000000 4980.320312 4982.135010
50% 5044.266113 5258.000000 NaN 5255.337402 5250.000000 5613.539551 5259.000000 5231.637207 5231.779785
75% 5441.289551 5578.500000 NaN 5578.190430 5543.000000 5869.918945 5590.000000 5564.726562 5562.813232
max 5975.219727 6111.000000 NaN 6116.865234 6113.000000 6126.963379 6120.000000 6073.276855 6073.898438
df.corr()
TANDEM MAPZEN AW3D30 ALASKA ASTER ARCTICDEM DEM3 COPDEM90 COPDEM30
TANDEM 1.000000 0.930963 NaN 0.930687 0.923299 0.858754 0.934220 0.928387 0.928303
MAPZEN 0.930963 1.000000 NaN 0.999929 0.997390 0.957611 0.998911 0.996033 0.995645
AW3D30 NaN NaN NaN NaN NaN NaN NaN NaN NaN
ALASKA 0.930687 0.999929 NaN 1.000000 0.997280 0.957513 0.998666 0.996075 0.995697
ASTER 0.923299 0.997390 NaN 0.997280 1.000000 0.960869 0.997277 0.995702 0.995283
ARCTICDEM 0.858754 0.957611 NaN 0.957513 0.960869 1.000000 0.957046 0.957821 0.957143
DEM3 0.934220 0.998911 NaN 0.998666 0.997277 0.957046 1.000000 0.995559 0.995141
COPDEM90 0.928387 0.996033 NaN 0.996075 0.995702 0.957821 0.995559 1.000000 0.999891
COPDEM30 0.928303 0.995645 NaN 0.995697 0.995283 0.957143 0.995141 0.999891 1.000000
df_diff.describe()
TANDEM-MAPZEN TANDEM-AW3D30 TANDEM-ALASKA TANDEM-ASTER TANDEM-ARCTICDEM TANDEM-DEM3 TANDEM-COPDEM90 TANDEM-COPDEM30 MAPZEN-AW3D30 MAPZEN-ALASKA ... ASTER-ARCTICDEM ASTER-DEM3 ASTER-COPDEM90 ASTER-COPDEM30 ARCTICDEM-DEM3 ARCTICDEM-COPDEM90 ARCTICDEM-COPDEM30 DEM3-COPDEM90 DEM3-COPDEM30 COPDEM90-COPDEM30
count 1671.000000 0.0 1671.000000 1671.000000 767.000000 1671.000000 1671.000000 1671.000000 0.0 1671.000000 ... 767.000000 1671.000000 1671.000000 1671.000000 767.000000 767.000000 767.000000 1671.000000 1671.000000 1671.000000
mean -165.419989 NaN -162.929626 -141.781450 -251.653717 -174.743149 -123.888710 -123.708183 NaN 2.490369 ... -102.185113 -32.961700 17.892747 18.073272 76.316795 110.184074 110.319916 50.854447 51.034972 0.180525
std 142.198023 NaN 142.417313 149.341491 224.423676 138.969170 144.647827 144.721756 NaN 4.234587 ... 108.948818 25.941984 38.488241 39.801988 114.381777 113.430321 114.278862 38.750864 40.056016 5.457573
min -851.888672 NaN -848.312500 -829.932129 -1085.924805 -872.888672 -812.890137 -812.099121 NaN -14.705078 ... -428.646973 -128.000000 -111.338867 -123.904297 -151.276367 -131.313965 -136.359863 -17.004395 -26.395508 -17.572266
25% -214.740479 NaN -212.847412 -193.438232 -358.547607 -217.682861 -179.401855 -178.104980 NaN 0.054199 ... -171.116211 -48.000000 -7.423828 -8.449463 -1.839355 36.502441 35.619141 23.536377 22.958496 -2.751221
50% -123.718750 NaN -120.674805 -100.195801 -170.058594 -133.516602 -95.284180 -95.392578 NaN 2.204590 ... -71.489746 -29.000000 12.738770 13.353027 38.955078 81.454102 82.882324 39.517090 39.264160 0.013672
75% -71.849121 NaN -67.788818 -44.948730 -111.032227 -84.589355 -17.190430 -18.154541 NaN 5.209473 ... -28.157715 -19.000000 40.641357 42.359863 139.544922 158.221924 158.155029 74.026611 73.800049 3.210938
max 16.507324 NaN 15.732910 85.662109 48.799805 14.181152 78.665039 84.786133 NaN 20.434082 ... 121.276367 52.000000 124.032227 128.154297 399.646973 452.215332 459.774902 163.009766 173.853027 18.569824

8 rows × 36 columns

df_diff.abs().describe()
TANDEM-MAPZEN TANDEM-AW3D30 TANDEM-ALASKA TANDEM-ASTER TANDEM-ARCTICDEM TANDEM-DEM3 TANDEM-COPDEM90 TANDEM-COPDEM30 MAPZEN-AW3D30 MAPZEN-ALASKA ... ASTER-ARCTICDEM ASTER-DEM3 ASTER-COPDEM90 ASTER-COPDEM30 ARCTICDEM-DEM3 ARCTICDEM-COPDEM90 ARCTICDEM-COPDEM30 DEM3-COPDEM90 DEM3-COPDEM30 COPDEM90-COPDEM30
count 1671.000000 0.0 1671.000000 1671.000000 767.000000 1671.000000 1671.000000 1671.000000 0.0 1671.000000 ... 767.000000 1671.000000 1671.000000 1671.000000 767.000000 767.000000 767.000000 1671.000000 1671.000000 1671.000000
mean 165.650691 NaN 163.309280 147.605664 253.502304 174.815853 134.962799 135.184494 NaN 3.799071 ... 112.711556 35.226212 31.869296 32.801881 95.275925 117.711647 118.163139 51.431971 52.023959 4.060298
std 141.929044 NaN 141.981552 143.584187 222.330780 138.877648 134.367798 134.057739 NaN 3.113807 ... 98.004051 22.770194 28.025463 28.886490 99.124644 105.587395 106.137970 37.980538 38.762088 3.649907
min 0.151367 NaN 0.070801 0.175293 0.293457 0.848633 0.050781 0.002441 NaN 0.002930 ... 0.155762 0.000000 0.000000 0.005371 0.184570 0.624512 0.650879 0.002441 0.012207 0.000488
25% 71.849121 NaN 67.788818 49.170898 111.032227 84.589355 38.032227 38.805664 NaN 1.328125 ... 41.791260 20.000000 10.204102 11.155762 21.433594 41.026611 41.187012 23.536377 23.231689 1.359131
50% 123.718750 NaN 120.674805 100.195801 170.058594 133.516602 95.284180 95.392578 NaN 3.072266 ... 73.289062 29.000000 22.945801 23.466309 52.738770 82.970215 84.257812 39.517090 39.264160 2.911621
75% 214.740479 NaN 212.847412 193.438232 358.547607 217.682861 179.401855 178.104980 NaN 5.534912 ... 171.116211 48.000000 46.310059 47.615723 141.093506 158.221924 158.155029 74.026611 73.800049 5.748779
max 851.888672 NaN 848.312500 829.932129 1085.924805 872.888672 812.890137 812.099121 NaN 20.434082 ... 428.646973 128.000000 124.032227 128.154297 399.646973 452.215332 459.774902 163.009766 173.853027 18.569824

8 rows × 36 columns

What’s next?#