【问题标题】:How to change individual entries in xarray.DataArray with sel?如何使用 sel 更改 xarray.DataArray 中的各个条目?
【发布时间】:2020-01-24 23:21:30
【问题描述】:

我在 xarray.DataArray 中有要操作的数据,但是它无法更改 DataArray 中的各个条目。

例子:

import numpy as np
import xarray as xr
data = np.random.rand(2,2)
times = [1998,1999]
locations = ['It','Be']

A = xr.DataArray(data, coords = [times, locations], dims = [time, space])

这给了我一个 DataArray。现在我想手动将 (1998,'It') 的条目设置为 5,但以下不起作用:

A.sel(time = 1998, space = 'It').values = 5

这都不行:

A.sel(time = 1998, space = 'It').values = array(5)

数据保持原样。然而,奇怪的是,下面的效果很好:

A.sel(time = 1998).values[0] = 5

你能解释一下这背后的逻辑吗?

【问题讨论】:

    标签: python python-xarray


    【解决方案1】:

    Xarray 的赋值不允许您使用selisel 为数组赋值。这在文档here 中有描述。对于您的应用程序,您可能希望使用 .loc 属性:

    A.loc[dict(time=1998, space='It')] = 5
    

    也可以使用DataArray.where 替换值。

    【讨论】:

    • 首先,感谢您的回答。与 loc 配合得很好。尽管如此,人们也可以通过使用 sel 来更改条目,如上所述,我不明白为什么这不适用于通过上面的第一种方法对单个条目起作用。
    • 很高兴它有效(请随意接受答案)。基本上,为 numpy 数组的切片赋值是很棘手的(不仅仅是在 xarray 中)。您将在 xarray 文档 (xarray.pydata.org/en/stable/…) 中看到关于此的重要警告部分
    • 我刚刚意识到,当您将['It'] 写为一个元素列表时,我声称有效的方法也不起作用。所以我会坚持使用 loc 命令,不会乱用 sel 。
    猜你喜欢
    • 2017-02-23
    • 1970-01-01
    • 1970-01-01
    • 2014-10-09
    • 1970-01-01
    • 2010-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多