用常量替换所有 xarray 数据集值

我有一个 xarray 数据集。我想复制它,使其具有与原件相同的尺寸/坐标/形状。这很简单。


import xarray as xr


n_segs = 4

n_dates = 5

num_vars = 4

dims = (n_segs, n_dates)


das = [xr.DataArray(np.random.rand(*dims), dims=['seg_id', 'date'])

       for i in range(num_vars)]


ds_orig = xr.Dataset({'a': das[0], 'b': das[1], 'c': das[2], 'd': das[3]})

ds_copy = ds_orig.copy(deep=True)

然后我想为副本中的所有值分配一个常量值(假设为 1)。我已经想出如何做到这一点where:


ds_copy.where(ds_copy == np.nan, other=1)

但这假设我的价值观都不会是nan而且有点违反直觉的海事组织。有没有更稳健的方法?


我想我也可以循环遍历数据变量(这是对 Pandas 的建议)... :


for v in ds_copy.data_vars:

    ds_copy[v].loc[:, :] = 1

也许我在这里寻找的是一种replace方法。


眼眸繁星
浏览 99回答 1
1回答

达令说

我会推荐循环方法,因为它会保留原始值的数据类型。中只有一个省略号就可以loc了,.data_vars可以省略(数据集有字典接口):for v in ds_copy:     ds_copy[v].loc[:] = 1要获得更健壮的版本where版本,您可以False直接传递以确保other将始终使用:ds_copy.where(False, 1)在存储 int 和 float 时,保留或不保留 dtype 可能不会有任何影响,但是,如果还有字符串或布尔变量,结果可能会发生巨大变化。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python