0

A slight modification on my last question python-xarray copy mask from one DataArray to another

When I read in another Hs file it picks up the attribute valid_min: 0 and therefore the file is read in with nan's automatically

f = xr.open_dataset('ww3.Hs.mask.nc')
<xarray.DataArray 'hs' (time: 1, latitude: 81, longitude: 131)>
array([[[   nan,    nan, ...,    nan,    nan],
    [   nan,    nan, ...,    nan,    nan],
    ..., 
    [   nan,  0.   , ...,  0.422,    nan],
    [   nan,    nan, ...,    nan,    nan]]])
Coordinates:
* latitude   (latitude) float32 0.0 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 ...
* longitude  (longitude) float32 -100.0 -99.0 -98.0 -97.0 -96.0 -95.0 ...
* time       (time) datetime64[ns] 1983-01-30
Attributes:
long_name:      significant height of wind and swell waves
standard_name:  sea_surface_wave_significant_height
globwave_name:  significant_wave_height
units:          m
valid_min:      0
valid_max:      32000

I'm now wondering how to pick up this mask for another variable. My guesses of the syntax were:

ws10_masked = ws10.where(hs == nan)
NameError: name 'nan' is not defined

ws10_masked = ws10.where(hs.isnull)
# Does not give an error message but does not set any values in ws10 to nan

ws10_masked = ws10.where(hs.isnull())
Traceback (most recent call last):
File "/nethome/rxb826/PYTHON3/myenv/lib/python3.6/site-
packages/xarray/backends/netCDF4_.py", line 60, in __getitem__
data = getitem(self.get_array(), key)
File "netCDF4/_netCDF4.pyx", line 3730, in 
netCDF4._netCDF4.Variable.__getitem__ (netCDF4/_netCDF4.c:39703)
File "/nethome/rxb826/PYTHON3/myenv/lib/python3.6/site-
packages/netCDF4/utils.py", line 391, in _out_array_shape
c = count[..., i].ravel()[0] # All elements should be identical.
IndexError: index 0 is out of bounds for axis 0 with size 0

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "paper_test.py", line 62, in <module>
ws10_masked = ws10.where(hs.isnull())
File "/nethome/rxb826/PYTHON3/myenv/lib/python3.6/site-packages/xarray/core/common.py", line 637, in where
out = outobj._where(outcond)
File "/nethome/rxb826/PYTHON3/myenv/lib/python3.6/site-
packages/xarray/core/dataarray.py", line 1541, in func
if not reflexive
File "/nethome/rxb826/PYTHON3/myenv/lib/python3.6/site-packages/xarray/core/ops.py", line 191, in func
return getattr(self, name)(*args, **kwargs)
File "/nethome/rxb826/PYTHON3/myenv/lib/python3.6/site-packages/xarray/core/variable.py", line 873, in where
return self._where(cond)
File "/nethome/rxb826/PYTHON3/myenv/lib/python3.6/site-packages/xarray/core/variable.py", line 1141, in func
self_data, other_data, dims = _broadcast_compat_data(self, other)
File "/nethome/rxb826/PYTHON3/myenv/lib/python3.6/site-packages/xarray/core/variable.py", line 1376, in _broadcast_compat_data
self_data = new_self.data
File "/nethome/rxb826/PYTHON3/myenv/lib/python3.6/site-packages/xarray/core/variable.py", line 267, in data
return self.values
File "/nethome/rxb826/PYTHON3/myenv/lib/python3.6/site-packages/xarray/core/variable.py", line 308, in values
return _as_array_or_item(self._data)
File "/nethome/rxb826/PYTHON3/myenv/lib/python3.6/site-packages/xarray/core/variable.py", line 184, in _as_array_or_item
data = np.asarray(data)
File "/nethome/rxb826/PYTHON3/myenv/lib/python3.6/site-packages/numpy/core/numeric.py", line 531, in asarray
return array(a, dtype, copy=False, order=order)
File "/nethome/rxb826/PYTHON3/myenv/lib/python3.6/site-packages/xarray/core/indexing.py", line 419, in __array__
self._ensure_cached()
File "/nethome/rxb826/PYTHON3/myenv/lib/python3.6/site-packages/xarray/core/indexing.py", line 416, in _ensure_cached
self.array = np.asarray(self.array)
File "/nethome/rxb826/PYTHON3/myenv/lib/python3.6/site-packages/numpy/core/numeric.py", line 531, in asarray
return array(a, dtype, copy=False, order=order)
File "/nethome/rxb826/PYTHON3/myenv/lib/python3.6/site-packages/xarray/core/indexing.py", line 400, in __array__
return np.asarray(self.array, dtype=dtype)
File "/nethome/rxb826/PYTHON3/myenv/lib/python3.6/site-packages/numpy/core/numeric.py", line 531, in asarray
return array(a, dtype, copy=False, order=order)
File "/nethome/rxb826/PYTHON3/myenv/lib/python3.6/site-packages/xarray/core/indexing.py", line 375, in __array__
return np.asarray(array[self.key], dtype=None)
File "/nethome/rxb826/PYTHON3/myenv/lib/python3.6/site-packages/xarray/conventions.py", line 363, in __getitem__
self.scale_factor, self.add_offset, self._dtype)
File "/nethome/rxb826/PYTHON3/myenv/lib/python3.6/site-packages/xarray/conventions.py", line 59, in mask_and_scale
values = np.array(array, dtype=dtype, copy=True)
File "/nethome/rxb826/PYTHON3/myenv/lib/python3.6/site-packages/xarray/core/indexing.py", line 375, in __array__
return np.asarray(array[self.key], dtype=None)
File "/nethome/rxb826/PYTHON3/myenv/lib/python3.6/site-packages/xarray/backends/netCDF4_.py", line 71, in __getitem__
raise IndexError(msg)
IndexError: The indexing operation you are attempting to perform is not valid on netCDF4.Variable object. Try loading your data into memory first by calling .load().

Cheers, Ray

1 Answer 1

1

DataArray.isnull() is a method, not a property, so you need to call it:

ws10_masked = ws10.where(hs.isnull())
Sign up to request clarification or add additional context in comments.

3 Comments

Got a complicated error and added above. May be a related to the python version 3.6 I am using. Happy to elaborate
Can you please open an issue on xarray's GitHub page? A link to files that we could use to reproduce it would also be helpful.
@shoyer I get this error all the time when attempting Boolean indexing on data not yet loaded from a netcdf. Is this not the intended behavior?

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.