Skip to content

Convert HDF5 to CSV online

Any table of an .h5 or NetCDF-4 file as a CSV, in your browser. Nothing is uploaded.

Open an HDF5 or NetCDF-4 file to convert it to CSV

Drop it here or choose a file. Pick a table, then download it as a CSV with its time column.

The sample: a month of made-up UK weather in three groups at three rates, and a table of four stations.

Tip: drop several files to compare them.

Your file never leaves your device. It is read and charted by your browser. Nothing is uploaded.

Opens on the table, one table at a time

View
The table, every row of the first group; the chart is one click away.
Tables
One per group, per 2-D dataset and per record array, in the menu of the file’s line.
Download
“Download as CSV” over the table: the time column and every column of the table shown.
Digits
15 significant digits; “Full precision (17 digits)” under “Do more” writes every digit.

At a glance

What you get
A CSV file with a header row, comma separated, UTF-8: the time column and every column of the table you pick, every row.
Tables
One per group (its datasets of one length), per 2-D dataset and per record array, in the menu of the file’s line: pick one, download it, then the next.
Time column
First: the dimension scale (NetCDF’s coordinate variable), with CF times such as “hours since 2026-01-01” as dates and times in UTC; else a dataset named like a time.
Values
Packed values unpacked, fill values as empty cells, numbers with 15 significant digits as Excel writes them (every digit on request), text as it is.
Not kept
The groups, attributes and data types: each table is a CSV of its own, and units show in the table and in Variables. Keep the original file.
Processing
Runs in your browser. The file is never uploaded, and you need no Python, MATLAB or desktop viewer.
Price
Free. No account or sign-up.

How to convert HDF5 to CSV

  1. Open your .h5 or .nc file. Choose it, or drop it on the converter at the top of this page. It opens on the table, on its first group. No file to hand? Click “Try a sample HDF5 file”.
  2. Pick the table. The menu in the file’s line lists the file’s tables: one per group, per 2-D dataset and per record array. “Variables” shows every group, dataset and attribute first, if you want to check.
  3. Download the CSV. Click “Download as CSV” over the table. The CSV holds the table’s time column and every column, every row; for another table, pick it and download again.

A worked example you can check

“Try a sample HDF5 file” opens a month of made-up UK weather, written with h5py: four tables, each against its time.

  • /hourly (744 rows, 5 columns and the time): temperatures in London, Leeds and York, London’s humidity, and its pressure stored packed, every hour from 1 January 2026.
  • /rain_gauge (4,464 rows, 2 columns and the time): rain in London and Leeds every ten minutes, on a time of its own.
  • /daily (31 rows, 4 columns and the time): the day’s highest and lowest temperature, its rain and the weather in words.
  • /stations/wind_speed (744 rows, 4 columns and the time): one 2-D dataset of 744 hours × 4 stations: a column per station, named by its station dimension, against the hourly time.

It opens on /hourly. Click Download as CSV, and the CSV starts like this: the time, stored as “hours since 2026-01-01 00:00:00”, as dates and times in UTC, then each dataset of the group.

time,London_Temperature,Leeds_Temperature,York_Temperature,London_Humidity,London_Pressure
2026-01-01 00:00,5.44,3.32,2.79,93.1,1013
2026-01-01 01:00,4.99,2.93,2.42,92.8,1011.8
2026-01-01 02:00,4.74,2.72,2.2,88,1012.6
2026-01-01 03:00,4.7,2.66,2.06,92.7,1012.3
2026-01-01 04:00,4.74,2.77,2.18,93.9,1011.4

London_Pressure is stored as whole numbers with a scale_factor of 0.1 and an add_offset of 1000, so the CSV has 1013 where the file has 130. Two hours hold its _FillValue, −32768, while the barometer was serviced: in the CSV they are empty cells, not −2276.8 (rows 200 to 203):

2026-01-09 07:00,5.84,4.26,2.35,87.3,1013.9
2026-01-09 08:00,6.58,4.9,2.99,87.9,
2026-01-09 09:00,7.32,5.53,3.67,87,
2026-01-09 10:00,8.15,6.25,4.32,81.1,1013.7

Pick /daily in the file’s line and download again: its times are whole days, so the time column holds dates, and the weather in words is a column of text.

time,London_Max_Temperature,London_Min_Temperature,London_Rain_Total,London_Conditions
2026-01-01,10.54,4.7,0,Cloudy
2026-01-02,10.77,4.85,10.7,Heavy rain

And /stations/wind_speed, one 2-D dataset of 744 hours by 4 stations, becomes a column per station, named by its station dimension:

time,London,Manchester,Leeds,Glasgow
2026-01-01 00:00,2.8,4.2,4.9,4.7
2026-01-01 01:00,3.8,3.9,4,5.8

Checked against h5py, the Python library for HDF5 files: a script reads the same datasets with h5py alone, unpacks them and writes them as this converter does, and a test opens the sample on every change to the site and compares its CSV with those lines (run on 2026-10-09 with h5py 3.16.0, HDF5 2.0.0, NumPy 2.5.3, Python 3.12.15). Download the sample (.h5, 74 KB) to try it elsewhere too: the same sample HDF5 file with groups and datasets is free to reuse under CC0.

What becomes CSV

Each group becomes a table against its time

An HDF5 file holds groups of datasets. The converter makes each group a table: its 1-D datasets of the same length become columns, after the time column, numbers first, then true or false as 1 and 0, then text, in the file’s order. Datasets of another length in the same group make a table of their own, named with their row count. Pick the table in the menu of the file’s line: “Download as CSV” writes that table, every column and row.

The time column

It is the dimension scale attached to the datasets (in a NetCDF-4 file, the coordinate variable of their dimension), else a dataset of the group named like a time (time, t, timestamp) whose values increase. CF units such as “hours since 2026-01-01 00:00:00” make it dates and times in UTC: to the minute (2026-01-01 00:00), with seconds or milliseconds when the times have them, and dates alone (2026-01-01) when every time is a whole day. Times on another calendar than the standard one, such as noleap or 360_day, stay numbers. A table without a time axis has no time column, and its rows are in the file’s order.

Packed values and fill values

Packed datasets, whole numbers with a scale_factor and an add_offset, are unpacked: each value is the stored one times scale_factor plus add_offset. Values equal to _FillValue or missing_value become empty cells, which Excel shows as blank and pandas and MATLAB’s readtable read as missing (NaN).

2-D datasets and record arrays

A 2-D dataset becomes a table of its own: its samples run along the dimension with a time axis (else the longer one), and each step of the other dimension is a column, named by a dimension scale of text or a columns attribute, up to 1,000 columns. A record array (a compound dataset) becomes a table of its members.

Number precision

Numbers are written with 15 significant digits, the precision Excel and MATLAB’s writetable write, so 0.1 stays 0.1. A float32 dataset is written in its own shortest form: 2.8, not 2.79999995231628. Tick Full precision (17 digits) under “Do more” to write every digit of each number.

What a CSV can’t keep

A CSV is one flat table of text, so some of an HDF5 file stays behind: the hierarchy (each table downloads as a CSV of its own), the attributes (units, long names and the file’s own notes; the units show next to each column in the table and in Variables) and the data types (float32, int16 and float64 all become decimal text). Datasets of three or more dimensions, single values and references aren’t converted. Keep the original file: the CSV is a copy for Excel, pandas or R, not a replacement.

NetCDF-4 .nc files too (not NetCDF-3)

A NetCDF-4 .nc file is an HDF5 file underneath, so it converts the same way: the variables of each dimension make a table, the coordinate variable of that dimension is the time column with its CF times as dates and times, packed variables are unpacked, fill values are empty cells, and a 2-D variable over a station dimension gets the station names as its column names.

NetCDF-3 files (the classic format and its 64-bit variants) are a different format and aren’t read: the converter says so. The netCDF tools’ nccopy turns one into NetCDF-4 (nccopy -k nc4 old.nc new.nc); open that file.

Other ways to convert HDF5 to CSV

  • Python: h5py reads a dataset (f["hourly/London_Temperature"][()]) and pandas’ to_csv writes a table of them; unpacking packed values, blanking fill values and turning CF times into dates are up to you. xarray does those for files that follow the netCDF conventions: xr.open_dataset("file.nc").to_dataframe().to_csv("file.csv").
  • MATLAB: h5read or ncread reads a dataset, and writetable writes the CSV.

The converter on this page needs none of them. To look inside a file first, open it in the HDF5 viewer; for MATLAB files, use MAT to CSV, and for LabVIEW files TDMS to CSV.

Private by design: nothing is uploaded

Measurement and simulation files often hold data that must not leave the lab. This converter reads your .h5 file and writes the CSV in your browser, so the file and its name never leave your device, and no upload limit applies. Read the privacy statement for details.

Next steps with your data

Frequently asked questions

How do I convert an h5 file to CSV?

Open the .h5 file in the converter at the top of this page, pick a table in the menu of the file’s line and click “Download as CSV”. Your browser reads the file and writes the CSV on your own device: no Python, MATLAB or desktop viewer, and nothing to install.

Can I open an HDF5 file in Excel?

Not as it is: Excel doesn’t open .h5 files itself. Convert the table you need to CSV here, then open the CSV in Excel. Excel stops at 1,048,576 rows, so for a longer table open the file in the HDF5 viewer instead, which has no fixed row limit, or split the CSV into Excel-sized parts.

Is my HDF5 file uploaded?

No. The file is read and converted by your browser on your own device; neither the file nor its name is sent anywhere, so there is no upload and no upload size limit. That makes it safe for confidential measurement and simulation data.

What about 3-D datasets?

Datasets of three or more dimensions, such as a map over time or a stack of images, aren’t converted yet: they are listed in Variables with their shape and why, and the 1-D and 2-D datasets of the file convert as usual. A CSV is one flat table, so save a 2-D slice of such a dataset to a dataset of its own (with h5py, for example) and convert that.

Can I convert a NetCDF-3 file?

Not yet. NetCDF-3 (classic) files aren’t HDF5 files underneath, so the converter says so when you open one. NetCDF-4 files convert as they are. The netCDF tools’ nccopy turns a NetCDF-3 file into NetCDF-4 (nccopy -k nc4 old.nc new.nc); open that one.

Coming soon to MegaRows: CSV to Excel and PDF reports · Compare CSV versions.

MegaRows processes files locally in your browser. Nothing is uploaded, not even the file name.