Read, write and manipulate dfs0, dfs1, dfs2, dfs3, dfsu and mesh files.
MIKE IO facilitates common data processing workflows for MIKE files using Python.
- Windows or Linux operating system
- Python x64 3.12 - 3.14
- (Windows) VC++ redistributables (already installed if you have MIKE)
pip install mikeioRead a file into a Dataset — a collection of named DataArrays sharing time and geometry:
>>> import mikeio
>>> ds = mikeio.read("HD2D.dfsu")
>>> ds
<mikeio.Dataset>
title: Output 1
dims: (time:9, element:884)
time: 1985-08-06 07:00:00 - 1985-08-07 03:00:00 (9 records)
geometry: Dfsu2D (884 elements, 529 nodes)
items:
0: Surface elevation <Surface Elevation> (meter)
1: U velocity <u velocity component> (meter per sec)
2: V velocity <v velocity component> (meter per sec)
3: Current speed <Current Speed> (meter per sec)Select an item and extract a time series at a point:
>>> da = ds["Surface elevation"]
>>> da.sel(x=606200, y=6905480)
<mikeio.DataArray>
name: Surface elevation
dims: (time:9)
time: 1985-08-06 07:00:00 - 1985-08-07 03:00:00 (9 records)
geometry: GeometryPoint2D(x=606202.7806372638, y=6905474.639383219)
values: [0.4595, 0.807, ..., -0.6322]Convert to pandas, or write the result back to a dfs file:
>>> df = mikeio.read("da_diagnostic.dfs0").to_dataframe()
>>> ds.to_dfs("output.dfsu")See the user guide for more.
- Documentation - https://dhi.github.io/mikeio/
- General help, new ideas and feature requests - GitHub Discussions
- Bugs - GitHub Issues
- Course material: Getting started with Dfs files in Python using MIKE IO
MIKE IO is tested extensively, with an overall statement coverage of ~95%. The test suite runs on every pull request against Python 3.12 and 3.14, and on a schedule on both Linux and Windows.
uv run pytest --cov=mikeioContributions are welcome — see CONTRIBUTING.md. Key architectural decisions are documented as ADRs.
