noaa-gml-file-reader
Read NOAA GML atmospheric trace-gas ASCII data files as
pandas.DataFrame objects — one function,
read_data(path).
Problems this solves
Reach for this if you are trying to:
- Read NOAA GML (ESRL/GMD) CO₂ or CH₄ data files in Python without writing a bespoke header parser.
- Load Mauna Loa (or any station's) CO₂ data into a pandas DataFrame —
surface-flask (event, monthly) or in-situ hourly
ccggfiles. - Parse NOAA greenhouse-gas ASCII (
.txt) files whose#-commented headers and-999.99missing-value sentinels trip uppandas.read_csv. - Handle both the pre-2020 (GMD) and current (GML) header formats without knowing which dialect a given file uses — the reader auto-detects.
What this reads
NOAA's Global Monitoring Laboratory (GML) publishes long-term atmospheric
trace-gas measurements (CO₂, CH₄, and others) as whitespace-delimited ASCII
files with a #-commented header — surface-flask event and monthly
series, in-situ hourly/daily series, and more, at
gml.noaa.gov/aftp/data/trace_gases.
This package turns one of those files into a tidy DataFrame, with the header's
column names and the documented missing-value sentinels handled for you.
Lineage (GMD → GML). NOAA renamed ESRL's Global Monitoring Division (GMD) to the Global Monitoring Laboratory (GML) in 2020, and the file header format changed with it. This package was originally
noaa_esrl_gmd_file_reader(2020); v2 renames it to noaa-gml-file-reader (importnoaa_gml_file_reader) and reads the current header format. See the breaking-change note below.
Install
pip install noaa-gml-file-reader
Requires Python ≥ 3.10 and pandas ≥ 2.0.
Usage
from noaa_gml_file_reader import read_data
df = read_data("co2_mlo_surface-flask_1_ccgg_month.txt")
print(df.head())
Real output (from the committed test fixture of the above Mauna Loa monthly file):
site year month value
0 MLO 1969 8 322.50
1 MLO 1969 9 321.36
2 MLO 1969 10 320.74
3 MLO 1969 11 321.98
4 MLO 1969 12 323.78
Columns come straight from the file's header; numeric columns are numeric
(value is float64, year/month are int64), and NOAA's missing-value
sentinels (-999.99, -999.999, nan) are parsed as NaN.
Supported dialects
read_data auto-detects the header dialect — you don't need to know NOAA's
format history to read a file:
| dialect | header key | column names from | seen in |
|---|---|---|---|
| current | # header_lines : N |
the bare column row that is the last header line | flask event, in-situ (hourly) |
| legacy (2020) | # number_of_header_lines: N |
the # data_fields: header line |
flask monthly |
The verified product set is CO₂/CH₄ surface-flask event + monthly and CO₂ in-situ hourly data at MLO. The header grammar is site- and gas-agnostic, so other stations/species in the same product families parse the same way.
Errors
An unparseable file raises UnrecognizedFormatError (carrying the path and
the file's first line) rather than returning data:
from noaa_gml_file_reader import read_data, UnrecognizedFormatError
try:
df = read_data("not-a-noaa-file.txt")
except UnrecognizedFormatError as err:
print(err)
v2 breaking changes
v2 is a breaking release (hence the major bump):
- Renamed
noaa_esrl_gmd_file_reader→noaa_gml_file_reader(distributionnoaa-gml-file-reader). - Raises
UnrecognizedFormatErroron unrecognized/malformed input. v1 returned an empty DataFrame on any parse failure — silently indistinguishable from "the file had no data" — which meant v1 failed silently on every current (post-2020) NOAA file. If you relied on the empty-DataFrame behavior, catch the exception instead. - Relicensed AGPL-3.0 → MIT.
Data & citation
The data are NOAA GML's, not this package's. Please cite the measurements per NOAA GML's guidance — each product directory under gml.noaa.gov/aftp/data/trace_gases ships a species-specific README with the citation text and data providers (the file headers also carry contact and reciprocity information). This library only parses the files; it does not download them.
License
MIT — see LICENSE. Built by Erick Shepherd.
Metadata
Release files for noaa-gml-file-reader 2.0.4
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| noaa_gml_file_reader-2.0.4.tar.gz | 23.5 kB | With provenance | Details for noaa_gml_file_reader-2.0.4.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| noaa_gml_file_reader-2.0.4-py3-none-any.whl | Python 3 | none | any | Details for noaa_gml_file_reader-2.0.4-py3-none-any.whl |
Total release size: 30.7 kB
Release files / noaa_gml_file_reader-2.0.4.tar.gz
| Download URL | noaa_gml_file_reader-2.0.4.tar.gz |
|---|---|
| Size | 23.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
f32ad9ee15b8d13ad1998aa5bee4d207896a548a7fcf039e4e42071ab27b5a48
|
|
BLAKE2b-256 checksum How to use checksums |
2c33467d3b6ea91c7027d059bee0ac2a8a96201826075840c910c85e1209ee7c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 22, 2026.
Transparency logRelease files / noaa_gml_file_reader-2.0.4-py3-none-any.whl
| Download URL | noaa_gml_file_reader-2.0.4-py3-none-any.whl |
|---|---|
| Size | 7.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
a446abf2b448343c019c79b3606c9df81e3f2a5de7099e858c1dd98002fea084
|
|
BLAKE2b-256 checksum How to use checksums |
3e1d4839ec9f234febdf981449bee5e863f27c9c7b3199a8d94614f0549e1a58
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 22, 2026.
Transparency logSecurity for noaa-gml-file-reader 2.0.4
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
Both files in this release have been uploaded with provenance metadata.
Attestation for noaa_gml_file_reader-2.0.4.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 22, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.