【问题标题】:xarray map (apply) gives error when keep_attrs is specifiedxarray map (apply) 在指定 keep_attrs 时出错
【发布时间】:2021-01-06 11:06:00
【问题描述】:

在 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我就失去了属性)

【问题讨论】:

    标签: python-xarray


    【解决方案1】:

    感谢您提供清晰的示例。

    这是一个糟糕的错误消息!随时将问题放到我们在 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...
    

    这能回答你的问题吗?

    【讨论】:

    • 我想保留坐标的属性,所以没有。我可能不了解 stack 和 groupby。
    • 我明白了,你想保留坐标attrs,而这只保留数据集的attrs。堆叠可能会失去attrs,因为它们不再是单独的坐标。整体转型的目标是什么?
    • Deepak 在这里回复了这个问题:github.com/pydata/xarray/issues/4450
    猜你喜欢
    • 1970-01-01
    • 2017-01-26
    • 2020-12-26
    • 2012-01-21
    • 1970-01-01
    • 2021-10-29
    • 2021-07-27
    • 2021-08-05
    相关资源
    最近更新 更多