netcdf4-python: python/numpy interface to the netCDF C library
Python/numpy interface to the netCDF C library.
For details on the latest updates, see the Changelog.
10/22/2024: Version 1.7.2 released. Minor updates/bugfixes and python 3.13 wheels, see Changelog for details.
06/17/2024: Version 1.7.1 released. Fixes for wheels, no code changes.
06/13/2024: Version 1.7.0 released. Add support for complex numbers via auto_complex
keyword to Dataset
(PR #1295)
10/20/2023: Version 1.6.5 released.
Fix for issue #1271 (mask ignored if bool MA assigned to uint8 var),
support for python 3.12 (removal of python 3.7 support), more
informative error messages.
6/4/2023: Version 1.6.4 released. Now requires
certifi to locate SSL certificates - this allows
OpenDAP https URLs to work with linux wheels (issue #1246).
3/3/2023: Version 1.6.3 released.
11/15/2022: Version 1.6.2 released. Fix for
compilation with netcdf-c < 4.9.0 (issue #1209).
Slicing multi-dimensional variables with an all False boolean index array
now returns an empty numpy array (instead of raising an exception - issue #1197).
09/18/2022: Version 1.6.1 released. GIL now
released for all C lib calls, set_alignment
and get_alignment
module functions
added to modify/retrieve HDF5 data alignment properties. Added Dataset
methods to
query availability of optional compression filters.
06/24/2022: Version 1.6.0 released. Support
for quantization (bit-grooming and bit-rounding) functionality in netcdf-c 4.9.0 which can
dramatically improve compression. Dataset.createVariable now accepts dimension instances (instead
of just dimension names). ‘compression’ kwarg added to Dataset.createVariable to support szip as
well as new compression algorithms available in netcdf-c 4.9.0 through compression plugins (such
as zstd, bzip2 and blosc). Working arm64 wheels for Apple M1 Silicon now available on pypi.
10/31/2021: Version 1.5.8 released. Fix Enum bug, add binary wheels for aarch64 and python 3.10.
6/22/2021: Version 1.5.7 released.
Fixed OverflowError on Windows when reading data with dimension sizes greater than 2**32-1.
Masked arrays no longer returned for vlens.
2/15/2021: Version 1.5.6 released. Added Dataset.fromcdl
and Dataset.tocdl
, which require ncdump
and ncgen
utilities to be in $PATH
. Removed python 2.7 support.
12/20/2020: Version 1.5.5.1 released.
Updated binary wheels for OSX and linux that link latest netcdf-c and hdf5 libs.
12/01/2020: Version 1.5.5 released.
Update license wording to be consistent with MIT license.
07/23/2020: Version 1.5.4 released.
Now requires numpy >= 1.9.
10/27/2019: Version 1.5.3 released. Fix for
issue #972, plus binary wheels for
python 3.8.
09/03/2019: Version 1.5.2 released. Bugfixes, no new features.
05/06/2019: Version 1.5.1.2 released. Fixes another slicing
regression (issue #922)) introduced in the 1.5.1 release.
05/02/2019: Version 1.5.1.1 released. Fixes incorrect __version__
module variable in 1.5.1 release, plus a slicing bug (issue #919)).
04/30/2019: Version 1.5.1 released. Bugfixes, no new features.
04/02/2019: Version 1.5.0.1 released. Binary wheels for macos x
and linux rebuilt with netcdf-c 4.6.3 (instead of 4.4.1.1). Added read-shared capability for faster reads
of NETCDF3 files (mode=’rs’).
03/24/2019: Version 1.5.0 released. Parallel IO support for classic
file formats added using the pnetcdf library (contribution from Lars Pastewka, pull request #897).
03/08/2019: Version 1.4.3.2 released.
Include missing membuf.pyx file in source tarball. No need to update if you installed
1.4.3.1 from a binary wheel.
03/07/2019: Version 1.4.3.1 released.
Fixes bug in implementation of NETCDF4_CLASSIC parallel IO support in 1.4.3.
03/05/2019: Version 1.4.3 released. Issues with netcdf-c 4.6.2 fixed (including broken parallel IO). set_ncstring_attrs()
method added, memoryview buffer now returned when an in-memory Dataset is closed.
10/26/2018: Version 1.4.2 released. Minor bugfixes, added Variable.get_dims()
method and master_file
kwarg for MFDataset.__init__
.
08/10/2018: Version 1.4.1 released. The old slicing behavior
(numpy array returned unless missing values are present, otherwise masked array returned) is re-enabled
via set_always_mask(False)
.
05/11/2018: Version 1.4.0 released. The netcdftime package is no longer
included, it is now a separate package dependency. In addition to several
bug fixes, there are a few important changes to the default behaviour to note:
set_auto_mask(False)
) a numpy array will always_FillValue
is no longer treated as a valid_min/valid_max. This was too surprising, despitevalid_min
, valid_max
and valid_range
are not set. nc.stringatt = ['foo','bar']
foobar
). In NETCDF3/NETCDF4_CLASSIC, an IOErrorfoobar
.set_auto_chartostring(False)
. Numpy structured'SN'
string subtypes can now be used tocreateCompoundType
(they get converted to ('S1',N)
valid_min
, valid_max
, _FillValue
and missing_value
are now treated as unsigned_Unsigned
variable attribute is set (to mimic behaviour of netcdf-java).11/01/2017: Version 1.3.1 released. Parallel IO support with MPI!
Requires that netcdf-c and hdf5 be built with MPI support, and mpi4py.
To open a file for parallel access in a program running in an MPI environment
using mpi4py, just use parallel=True
when creating
the Dataset
instance. See examples/mpi_example.py
for a demonstration. For more info, see the tutorial section.
9/25/2017: Version 1.3.0 released. Bug fixes
for netcdftime
and optimizations for reading strided slices. encoding
kwarg added toDataset.__init__
and Dataset.filepath
to deal with oddball encodings in filename
paths (sys.getfilesystemencoding()
is used by default to determine encoding).
Make sure numpy datatypes used to define CompoundTypes have isalignedstruct
flag set
to avoid segfaults - which required bumping the minimum required numpy from 1.7.0
to 1.9.0. In cases where missing_value/valid_min/valid_max/_FillValue
cannot be
safely cast to the variable’s dtype, they are no longer be used to automatically
mask the data and a warning message is issued.
6/10/2017: Version 1.2.9 released. Fixes for auto-scaling
and masking when _Unsigned
and/or valid_min
, valid_max
attributes present. setup.py updated
so that pip install
works if cython not installed. Now requires setuptools
version 18.0 or greater.
6/1/2017: Version 1.2.8 released. From Changelog:
_Unsigned
attribute used by netcdf-javanumpy.ma
_Encoding
attribute for NC_STRING
variables, otherwise use_Encoding
is specified for an NC_CHAR
('S1'
) variable,set_auto_chartostring
Dataset and Variable method (defaultTrue
). Addresses issue #654_netCDF4.c
and _netcdftime.c
removed from1/8/2017: Version 1.2.7 released.
Python 3.6 compatibility, and fix for vector missing_values.
12/10/2016: Version 1.2.6 released.
Bug fixes for Enum data type, and _FillValue/missing_value usage when data is stored
in non-native endian format. Add get_variables_by_attributes to MFDataset. Support for python 2.6 removed.
12/1/2016: Version 1.2.5 released.
See the Changelog for changes.
4/15/2016: Version 1.2.4 released.
Bugs in handling of variables with specified non-native “endian-ness” (byte-order) fixed ([issue #554]
(https://github.com/Unidata/netcdf4-python/issues/554)). Build instructions updated and warning issued
to deal with potential backwards incompatibility introduced when using HDF5 1.10.x
(see Unidata/netcdf-c/issue#250).
3/10/2016: Version 1.2.3 released. Various bug fixes.
All text attributes in NETCDF4
formatted files are now written as type NC_CHAR
, unless they contain unicode characters that
cannot be encoded in ascii, in which case they are written as NC_STRING
. Previously,
all unicode strings were written as NC_STRING
. This change preserves compatibility
with clients, like Matlab, that can’t deal with NC_STRING
attributes.
A setncattr_string
method was added to force attributes to be written as NC_STRING
.
1/1/2016: Version 1.2.2 released. Mostly bugfixes, but with two new features.
support for the new NETCDF3_64BIT_DATA
format introduced in netcdf-c 4.4.0.
Similar to NETCDF3_64BIT
(now NETCDF3_64BIT_OFFSET
), but includes
64 bit dimension sizes (> 2 billion), plus unsigned and 64 bit integer data types.
Uses the classic (netcdf-3) data model, and does not use HDF5 as the underlying storage format.
Dimension objects now have a size
attribute, which is the current length
of the dimension (same as invoking len
on the Dimension instance).
The minimum required python version has now been increased from 2.5 to 2.6.
10/15/2015: Version 1.2.1 released. Adds the ability
to slice Variables with unsorted integer sequences, and integer sequences with duplicates.
9/23/2015: Version 1.2.0 released. New features:
get_variables_by_attributesDataset
and Group
method for retrieving variables that have matching attributes.
Support for Enum data types.
isopen Dataset
method.
7/28/2015: Version 1.1.9 bugfix release.
5/14/2015: Version 1.1.8 released. Unix-like paths can now be used in createVariable
and createGroup
.
v = nc.createVariable('/path/to/var1', ('xdim', 'ydim'), float)
will create a variable named ‘var1’, while also creating the groups
‘path’ and ‘path/to’ if they do not already exist.
Similarly,
g = nc.createGroup('/path/to')
now acts like mkdir -p
in unix, creating groups ‘path’ and ‘/path/to’,
if they don’t already exist. Users who relied on nc.createGroup(groupname)
failing when the group already exists will have to modify their code, sincenc.createGroup
will now return the existing group instance.Dataset.__getitem__
was also added. nc['/path/to']
now returns a group instance, and nc['/path/to/var1']
now returns a variable instance.
3/19/2015: Version 1.1.7 released. Global Interpreter Lock (GIL) now released when extension
module calls C library for read operations. This speeds up concurrent reads when using threads.
Users who wish to use netcdf4-python inside threads should read http://www.hdfgroup.org/hdf5-quest.html#gconc
regarding thread-safety in the HDF5 C library. Fixes to setup.py
now ensure that pip install netCDF4
with export USE_NCCONFIG=0
will use environment variables to find paths to libraries and include files,
instead of relying exclusively on the nc-config utility.
The easiest way to install is through pip:
pip install netCDF4
or, if you are a user of the Conda package manager,
conda install -c conda-forge netCDF4
Clone GitHub repository (git clone https://github.com/Unidata/netcdf4-python.git
)
Make sure numpy and Cython are
installed and you have Python 3.8 or newer.
Make sure HDF5 and netcdf-4 are installed,
and the nc-config
utility is in your Unix PATH.
Run python setup.py build
, then pip install -e .
.
To run all the tests, execute cd test && python run_all.py
.
See the online docs for more details.