xarray 映射(应用)在指定 keep_attrs 时给出错误

xarray map (apply) gives error when keep_attrs is specified

在 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, func, 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, *args, **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...

这是否回答了您的问题?