Go to the end to download the full example code
Time series data and Pandas#
Handling time series is major part of geohydrology and groundwater modeling. Time series data come in more than one form:
Time series linked to a point location, for example a measured groundwater level at a specific location.
Time series of a spatially continuous nature, for example model output of calculated head for a specific model layer.
We typically represent time series data at points as a
pandas.DataFrame, despite the (apparent) match with GeoDataFrames.
The issue is that a GeoDataFrame has to store the geometry for every row: this
means many duplicated geometries. Fortunately, pandas’ group by
(split-apply-combine) functionality provides a (fairly) convenient way of
working with time series data of many points.
Pandas provides many tools for working with time series data, such as:
Input and output to many tabular formats, such as CSV or Excel;
Filling or interpolating missing data;
Resampling to specific frequencies;
Timeseries at point locations#
iMOD represents time series at points in an IPF format. This format stores its data as:
A “mother” file containing the x and y coordinates of the point. Each point can be associated with a timeseries with a label.
A timeries file for every point.
These files can be read via
will read the mother file, and follow its labels, reading every associated
timeseries file as well. Finally, these are merged into a single large table;
the properties of the point (e.g. the x,y coordinates) are duplicated for every
This may seem wasteful, but:
There are few data structures available for storing point data with associated time series. For example: xarray can store the point location as coordinates, but every point will need to share its time axis – the same time window for every point and the same time resolution.
There are equally few file formats suitable for this data. A single large table is supported by many file formats.
Pandas group by functionality is quite fast.
Total running time of the script: ( 0 minutes 0.000 seconds)