当指定keep_attrs时,xarray映射应用给出错误

问题描述

在xarray版本0.16中,当我将keep_attrs=True添加到xarray.dataset.map(http://xarray.pydata.org/en/stable/generated/xarray.Dataset.map.html#xarray.Dataset.map

ds =  xr.tutorial.open_dataset("air_temperature")
stacked = ds.stack(allpoints=['lon','lat'])  
#test_map = stacked.groupby('allpoints').map(np.mean) 
test_map = stacked.groupby('allpoints').map(np.mean,keep_attrs=True)
test_map.air.unstack('allpoints').plot()

我得到了错误

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-202-f06a419ac8a1> in <module>
      2 stacked = ds.stack(allpoints=['lon','lat'])
      3 #test_map = stacked.groupby('allpoints').map(np.mean)
----> 4 test_map = stacked.groupby('allpoints').map(np.mean,keep_attrs=True)
      5 test_map.air.unstack('allpoints').plot()

~/miniconda3/envs/pangeo/lib/python3.6/site-packages/xarray/core/groupby.py in map(self,func,args,shortcut,**kwargs)
    921         # ignore shortcut if set (for Now)
    922         applied = (func(ds,*args,**kwargs) for ds in self._iter_grouped())
--> 923         return self._combine(applied)
    924 
    925     def apply(self,args=(),shortcut=None,**kwargs):

~/miniconda3/envs/pangeo/lib/python3.6/site-packages/xarray/core/groupby.py in _combine(self,applied)
    941     def _combine(self,applied):
    942         """Recombine the applied objects like the original."""
--> 943         applied_example,applied = peek_at(applied)
    944         coord,dim,positions = self._infer_concat_args(applied_example)
    945         combined = concat(applied,dim)

~/miniconda3/envs/pangeo/lib/python3.6/site-packages/xarray/core/utils.py in peek_at(iterable)
    181     """
    182     gen = iter(iterable)
--> 183     peek = next(gen)
    184     return peek,itertools.chain([peek],gen)
    185 

~/miniconda3/envs/pangeo/lib/python3.6/site-packages/xarray/core/groupby.py in <genexpr>(.0)
    920         """
    921         # ignore shortcut if set (for Now)
--> 922         applied = (func(ds,**kwargs) for ds in self._iter_grouped())
    923         return self._combine(applied)
    924 

<__array_function__ internals> in mean(*args,**kwargs)

TypeError: _mean_dispatcher() got an unexpected keyword argument 'keep_attrs'

似乎keep_attrs=True选项没有达到我想要的位置。 (如果没有keep_attrs=True,我将失去属性

解决方法

感谢明确的示例。

这是错误的错误消息!随时将问题发布到我们在GitHub上的问题跟踪器中。

在这种情况下,无需使用np.mean,只需使用mean


In [15]: stacked.groupby('allpoints').mean(...,keep_attrs=True)
Out[15]:
<xarray.Dataset>
Dimensions:            (allpoints: 1325)
Coordinates:
  * allpoints          (allpoints) MultiIndex
  - allpoints_level_0  (allpoints) float64 200.0 200.0 200.0 ... 330.0 330.0
  - allpoints_level_1  (allpoints) float64 75.0 72.5 70.0 ... 20.0 17.5 15.0
Data variables:
    air                (allpoints) float32 260.37643 262.73438 ... 297.30508
Attributes:
    Conventions:  COARDS
    title:        4x daily NMC reanalysis (1948)
    description:  Data is from NMC initialized reanalysis\n(4x/day).  These a...
    platform:     Model
    references:   http://www.esrl.noaa.gov/psd/data/gridded/data.ncep.reanaly...

这能回答您的问题吗?