为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

眼眸繁星 2022-12-20 13:59:55
我有一个 xarray 数据集。我想复制它,使其具有与原件相同的尺寸/坐标/形状。这很简单。import xarray as xrn_segs = 4n_dates = 5num_vars = 4dims = (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方法。
查看完整描述

1 回答

?
达令说

TA贡献1821条经验 获得超6个赞

我会推荐循环方法,因为它会保留原始值的数据类型。中只有一个省略号就可以loc了,.data_vars可以省略(数据集有字典接口):

for v in ds_copy:
    ds_copy[v].loc[:] = 1

要获得更健壮的版本where版本,您可以False直接传递以确保other将始终使用:

ds_copy.where(False, 1)

在存储 int 和 float 时,保留或不保留 dtype 可能不会有任何影响,但是,如果还有字符串或布尔变量,结果可能会发生巨大变化。


查看完整回答
反对 回复 2022-12-20
  • 1 回答
  • 0 关注
  • 59 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信