-
-
Notifications
You must be signed in to change notification settings - Fork 1.1k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Keep attributes across operations #2582
Comments
Thanks for the report! It looks like we definitely overlooked this in arithmetic operations. I agree that Any interest in putting together a PR?
|
Thanks for the quick reply. @staticmethod
def _binary_op(f, reflexive=False, **ignored_kwargs):
@functools.wraps(f)
def func(self, other):
if isinstance(other, (xr.DataArray, xr.Dataset)):
return NotImplemented
self_data, other_data, dims = _broadcast_compat_data(self, other)
# Add Attributes here ?
keep_attrs = _get_keep_attrs(default=False)
attrs = self._attrs if keep_attrs else None
with np.errstate(all='ignore'):
new_data = (f(self_data, other_data)
if not reflexive
else f(other_data, self_data))
result = Variable(dims, new_data, attrs=attrs)
return result
return func should do the trick. Right.
xr.show_versions()
INSTALLED VERSIONScommit: 0d6056e xarray: 0.11.0+10.g0d6056e8.dirty When the option is not set, same behavior as before print(a-b)
<xarray.DataArray 'temp' (x: 3, y: 3)>
array([[ 0.133102, -1.275794, 1.331784],
[ 0.995555, -0.509624, 0.188597],
[ 1.922048, -0.053253, -0.293245]])
Dimensions without coordinates: x, y set the option: with xr.set_options(keep_attrs=True):
print(a-b)
<xarray.DataArray 'temp' (x: 3, y: 3)>
array([[ 0.133102, -1.275794, 1.331784],
[ 0.995555, -0.509624, 0.188597],
[ 1.922048, -0.053253, -0.293245]])
Dimensions without coordinates: x, y
Attributes:
units: K works. Hope that helps you. |
PR is a pull-request! If you can open a PR with your code, we can merge it to the repo. Would be greatly appreciated from xarray, and you'd be an xarray contributor. Let us know if we can help guide you through the mechanics. |
@MBlaschek This might help: https://help.github.com/articles/proposing-changes-to-your-work-with-pull-requests/ . You'd start by creating a fork, then a branch with your changes, push your changes to github and then initiate a pull request. |
Hi @MBlaschek, almost there! You'll need to open your pull request in this repository :). You'll also need to add some tests to make sure your changes keep working as the code is updated in the future. E.g. xarray/xarray/tests/test_variable.py Line 1533 in 0d6056e
|
Hi. |
The Problem
When I have two DataArrays and I use a standard operation (
+, - ,*, /
) the attributes vanish. I think that should not be the case. Even when using as suggested theset_options
Problem description
Attributes vanish when a normal operation is applied!
From docs of set_options:
keep_attrs
: rule for whether to keep attributes on xarrayDatasets/dataarrays after operations. Either
True
to always keepattrs,
False
to always discard them, or'default'
to use originallogic that attrs should only be kept in unambiguous circumstances.
Default:
'default'
.Expected Output
The Attributes should remain. Maybe keep only attributes from the left Array ?
Please adjust or advise me.
Output of
xr.show_versions()
xarray: 0.11.0
pandas: 0.23.4
numpy: 1.15.4
scipy: 1.1.0
netCDF4: 1.4.2
h5netcdf: None
h5py: 2.8.0
Nio: None
zarr: None
cftime: 1.0.2.1
PseudonetCDF: None
rasterio: None
iris: None
bottleneck: 1.2.1
cyordereddict: None
dask: 0.20.2
distributed: 1.24.2
matplotlib: 3.0.1
cartopy: 0.16.0
seaborn: 0.9.0
setuptools: 40.6.2
pip: 18.1
conda: 4.5.11
pytest: 4.0.0
IPython: 7.1.1
sphinx: 1.8.2
``
The text was updated successfully, but these errors were encountered: