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-06-28 23:03:27: oggm.cfg: Reading default parameters from the OGGM `params.cfg` configuration file.
2026-06-28 23:03:27: oggm.cfg: Multiprocessing switched OFF according to the parameter file.
2026-06-28 23:03:27: oggm.cfg: Multiprocessing: using all available processors (N=4)
2026-06-28 23:03:27: 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-06-28 23:03:27: oggm.workflow: init_glacier_directories from prepro level 1 on 1 glaciers.
2026-06-28 23:03:27: oggm.workflow: Execute entity tasks [gdir_from_prepro] on 1 glaciers
2026-06-28 23:03:27: 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: ['COPDEM90', 'TANDEM', 'DEM3', 'COPDEM30', 'ALASKA', 'ARCTICDEM', 'MAPZEN', 'AW3D30', 'ASTER']
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/ed9088f98a54a8551de92e3ac0001695ecdecb3f06f315786c53379138ca9ffc.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/cdbd7a1684bac696d65e0933fceeb7960b084d379c177a4ab12fa5de260496e6.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
COPDEM90 TANDEM DEM3 COPDEM30 ALASKA ARCTICDEM MAPZEN AW3D30 ASTER
count 1671.000000 1671.000000 1671.000000 1671.000000 1671.000000 767.000000 1671.000000 0.0 1671.000000
mean 5277.694824 5153.806152 5328.549372 5277.514160 5316.735352 5529.413086 5319.226212 NaN 5295.587672
std 370.293671 388.357605 351.724101 370.142792 351.459656 393.222046 350.840381 NaN 351.229245
min 4584.852539 4497.636719 4644.000000 4585.657715 4610.906738 4871.422852 4622.000000 NaN 4565.000000
25% 4980.320312 4837.172607 5058.000000 4982.135010 5047.515381 5111.490234 5050.000000 NaN 5026.500000
50% 5231.637207 5044.266113 5259.000000 5231.779785 5255.337402 5613.539551 5258.000000 NaN 5250.000000
75% 5564.726562 5441.289551 5590.000000 5562.813232 5578.190430 5869.918945 5578.500000 NaN 5543.000000
max 6073.276855 5975.219727 6120.000000 6073.898438 6116.865234 6126.963379 6111.000000 NaN 6113.000000
range 1488.424316 1477.583008 1476.000000 1488.240723 1505.958496 1255.540527 1489.000000 NaN 1548.000000

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
[-500, -300, -150, -100, -50, -20, -10, 0, 10, 20, 50, 100, 150, 300, 500]
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/3120c01efb817f82d9910b63dc6b6f56a66907c71208a4109e8a4214f8fa05b1.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/b4b31f05ce2680f50004ce081ab01003f1a0d5d4a31c9a43908dfe9170fd8a20.png

Table statistics#

df.describe()
COPDEM90 TANDEM DEM3 COPDEM30 ALASKA ARCTICDEM MAPZEN AW3D30 ASTER
count 1671.000000 1671.000000 1671.000000 1671.000000 1671.000000 767.000000 1671.000000 0.0 1671.000000
mean 5277.694824 5153.806152 5328.549372 5277.514160 5316.735352 5529.413086 5319.226212 NaN 5295.587672
std 370.293671 388.357605 351.724101 370.142792 351.459656 393.222046 350.840381 NaN 351.229245
min 4584.852539 4497.636719 4644.000000 4585.657715 4610.906738 4871.422852 4622.000000 NaN 4565.000000
25% 4980.320312 4837.172607 5058.000000 4982.135010 5047.515381 5111.490234 5050.000000 NaN 5026.500000
50% 5231.637207 5044.266113 5259.000000 5231.779785 5255.337402 5613.539551 5258.000000 NaN 5250.000000
75% 5564.726562 5441.289551 5590.000000 5562.813232 5578.190430 5869.918945 5578.500000 NaN 5543.000000
max 6073.276855 5975.219727 6120.000000 6073.898438 6116.865234 6126.963379 6111.000000 NaN 6113.000000
df.corr()
COPDEM90 TANDEM DEM3 COPDEM30 ALASKA ARCTICDEM MAPZEN AW3D30 ASTER
COPDEM90 1.000000 0.928387 0.995559 0.999891 0.996075 0.957821 0.996033 NaN 0.995702
TANDEM 0.928387 1.000000 0.934220 0.928303 0.930687 0.858754 0.930963 NaN 0.923299
DEM3 0.995559 0.934220 1.000000 0.995141 0.998666 0.957046 0.998911 NaN 0.997277
COPDEM30 0.999891 0.928303 0.995141 1.000000 0.995697 0.957143 0.995645 NaN 0.995283
ALASKA 0.996075 0.930687 0.998666 0.995697 1.000000 0.957513 0.999929 NaN 0.997280
ARCTICDEM 0.957821 0.858754 0.957046 0.957143 0.957513 1.000000 0.957611 NaN 0.960869
MAPZEN 0.996033 0.930963 0.998911 0.995645 0.999929 0.957611 1.000000 NaN 0.997390
AW3D30 NaN NaN NaN NaN NaN NaN NaN NaN NaN
ASTER 0.995702 0.923299 0.997277 0.995283 0.997280 0.960869 0.997390 NaN 1.000000
df_diff.describe()
COPDEM90-TANDEM COPDEM90-DEM3 COPDEM90-COPDEM30 COPDEM90-ALASKA COPDEM90-ARCTICDEM COPDEM90-MAPZEN COPDEM90-AW3D30 COPDEM90-ASTER TANDEM-DEM3 TANDEM-COPDEM30 ... ALASKA-ARCTICDEM ALASKA-MAPZEN ALASKA-AW3D30 ALASKA-ASTER ARCTICDEM-MAPZEN ARCTICDEM-AW3D30 ARCTICDEM-ASTER MAPZEN-AW3D30 MAPZEN-ASTER AW3D30-ASTER
count 1671.000000 1671.000000 1671.000000 1671.000000 767.000000 1671.000000 0.0 1671.000000 1671.000000 1671.000000 ... 767.000000 1671.000000 0.0 1671.000000 767.000000 0.0 767.000000 0.0 1671.000000 0.0
mean 123.888710 -50.854447 0.180525 -39.040920 -110.184074 -41.531287 NaN -17.892747 -174.743149 -123.708183 ... -85.975136 -2.490369 NaN 21.148171 83.946521 NaN 102.185113 NaN 23.638540 NaN
std 144.647827 38.750864 5.457573 37.098961 113.430321 37.537576 NaN 38.488241 138.969170 144.721756 ... 113.401772 4.234587 NaN 25.915689 113.273900 NaN 108.948818 NaN 25.367381 NaN
min -78.665039 -163.009766 -17.572266 -130.026367 -452.215332 -135.499023 NaN -124.032227 -872.888672 -812.099121 ... -401.538574 -20.434082 NaN -55.279785 -146.276367 NaN -121.276367 NaN -54.000000 NaN
25% 17.190430 -74.026611 -2.751221 -65.058350 -158.221924 -68.542236 NaN -40.641357 -217.682861 -178.104980 ... -143.909668 -5.209473 NaN 1.874023 4.010010 NaN 28.157715 NaN 6.000000 NaN
50% 95.284180 -39.517090 0.013672 -33.313477 -81.454102 -34.726074 NaN -12.738770 -133.516602 -95.392578 ... -58.945312 -2.204590 NaN 19.398438 56.379883 NaN 71.489746 NaN 22.000000 NaN
75% 179.401855 -23.536377 3.210938 -10.340332 -36.502441 -12.118164 NaN 7.423828 -84.589355 -18.154541 ... -5.880127 -0.054199 NaN 36.852539 143.172607 NaN 171.116211 NaN 40.000000 NaN
max 812.890137 17.004395 18.569824 42.941895 131.313965 33.757324 NaN 111.338867 14.181152 84.786133 ... 147.653809 14.705078 NaN 137.751953 396.646973 NaN 428.646973 NaN 130.000000 NaN

8 rows × 36 columns

df_diff.abs().describe()
COPDEM90-TANDEM COPDEM90-DEM3 COPDEM90-COPDEM30 COPDEM90-ALASKA COPDEM90-ARCTICDEM COPDEM90-MAPZEN COPDEM90-AW3D30 COPDEM90-ASTER TANDEM-DEM3 TANDEM-COPDEM30 ... ALASKA-ARCTICDEM ALASKA-MAPZEN ALASKA-AW3D30 ALASKA-ASTER ARCTICDEM-MAPZEN ARCTICDEM-AW3D30 ARCTICDEM-ASTER MAPZEN-AW3D30 MAPZEN-ASTER AW3D30-ASTER
count 1671.000000 1671.000000 1671.000000 1671.000000 767.000000 1671.000000 0.0 1671.000000 1671.000000 1671.000000 ... 767.000000 1671.000000 0.0 1671.000000 767.000000 0.0 767.000000 0.0 1671.000000 0.0
mean 134.962799 51.431971 4.060298 42.339176 117.711647 44.107472 NaN 31.869296 174.815853 135.184494 ... 105.086456 3.799071 NaN 26.224301 103.447394 NaN 112.711556 NaN 27.788151 NaN
std 134.367798 37.980538 3.649907 33.283024 105.587395 34.471963 NaN 28.025463 138.877648 134.057739 ... 95.936180 3.113807 NaN 20.760783 95.769833 NaN 98.004051 NaN 20.735849 NaN
min 0.050781 0.002441 0.000488 0.000000 0.624512 0.069336 NaN 0.000000 0.848633 0.002441 ... 0.155273 0.002930 NaN 0.001953 0.289062 NaN 0.155762 NaN 0.000000 NaN
25% 38.032227 23.536377 1.359131 14.249756 41.026611 14.985596 NaN 10.204102 84.589355 38.805664 ... 36.557861 1.328125 NaN 11.052246 33.356445 NaN 41.791260 NaN 12.000000 NaN
50% 95.284180 39.517090 2.911621 33.496582 82.970215 34.726074 NaN 22.945801 133.516602 95.392578 ... 65.577148 3.072266 NaN 21.200195 64.257812 NaN 73.289062 NaN 24.000000 NaN
75% 179.401855 74.026611 5.748779 65.058350 158.221924 68.542236 NaN 46.310059 217.682861 178.104980 ... 144.205811 5.534912 NaN 37.241211 144.176514 NaN 171.116211 NaN 40.000000 NaN
max 812.890137 163.009766 18.569824 130.026367 452.215332 135.499023 NaN 124.032227 872.888672 812.099121 ... 401.538574 20.434082 NaN 137.751953 396.646973 NaN 428.646973 NaN 130.000000 NaN

8 rows × 36 columns

What’s next?#