【问题标题】:Replace all xarray dataset values with a constant将所有 xarray 数据集值替换为常量
【发布时间】:2020-06-05 01:59:57
【问题描述】:

我有一个 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,并且有点违反直觉。有没有更稳健的方法?

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

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

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

【问题讨论】:

    标签: python python-xarray


    【解决方案1】:

    我会推荐循环方法,因为它会保留原始值的 dtypes。 loc 中只需一个省略号即可,.data_vars 可以省略(数据集有dictionary interface):

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

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

    ds_copy.where(False, 1)
    

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

    【讨论】:

    • 谢谢,@OriolAbril - 非常有用的提示
    猜你喜欢
    • 2018-10-11
    • 1970-01-01
    • 2016-09-07
    • 2022-06-15
    • 1970-01-01
    • 2016-06-08
    • 1970-01-01
    • 2022-12-10
    • 2017-06-13
    相关资源
    最近更新 更多