Skip to main content

Read NOAA GML atmospheric trace-gas ASCII data files as pandas DataFrames.

Project description

noaa-gml-file-reader

CI Python License: MIT

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 ccgg files.
  • Parse NOAA greenhouse-gas ASCII (.txt) files whose #-commented headers and -999.99 missing-value sentinels trip up pandas.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 (import noaa_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

Supported products are those catalogued in docs/format-notes.md (CO₂/CH₄ surface-flask event + monthly, CO₂ in-situ hourly, 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_readernoaa_gml_file_reader (distribution noaa-gml-file-reader).
  • Raises UnrecognizedFormatError on 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.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

noaa_gml_file_reader-2.0.1.tar.gz (31.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

noaa_gml_file_reader-2.0.1-py3-none-any.whl (7.1 kB view details)

Uploaded Python 3

File details

Details for the file noaa_gml_file_reader-2.0.1.tar.gz.

File metadata

  • Download URL: noaa_gml_file_reader-2.0.1.tar.gz
  • Upload date:
  • Size: 31.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for noaa_gml_file_reader-2.0.1.tar.gz
Algorithm Hash digest
SHA256 5a831a886133c365c4c9775720834afea84bc9bfd02e24985708f64c2a85bd6e
MD5 b1285fb808aabff1314b041a27b64e23
BLAKE2b-256 d2d224a60497e4d1c895ab5bdc12ca4a57d70be155e2c96af039ab44fadbf455

See more details on using hashes here.

Provenance

The following attestation bundles were made for noaa_gml_file_reader-2.0.1.tar.gz:

Publisher: publish.yml on ErickShepherd/noaa-gml-file-reader

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file noaa_gml_file_reader-2.0.1-py3-none-any.whl.

File metadata

File hashes

Hashes for noaa_gml_file_reader-2.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 90de2437aa5b178810b42eb2a5f4b33731eda29e159c959e877fbf5e8809484d
MD5 2382d4e30b1607be62de3982e3ba348b
BLAKE2b-256 d533dac64342249081b0ac390aa1111707e115b745fb3fb6403f6fe36722f1ef

See more details on using hashes here.

Provenance

The following attestation bundles were made for noaa_gml_file_reader-2.0.1-py3-none-any.whl:

Publisher: publish.yml on ErickShepherd/noaa-gml-file-reader

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page