You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在xarray.DataArray中一次性替换多个值?

用Xarray批量替换栅格数值的方法

方法一:直接使用DataArray.replace()(推荐)

Xarray的DataArray原生支持replace()方法,用法和Pandas的replace()完全一致,直接传入替换字典就能批量完成数值替换,无需手动迭代或多次调用where/fillna。

示例代码:

import xarray as xr

# 创建示例数据数组
da = xr.DataArray([0,10,10,10,2,2,2,3])
# 定义替换规则字典
replace_dict = {10: 1, 2: 20}
# 执行批量替换
result_da = da.replace(replace_dict)
print(result_da)

执行后会直接将所有10替换为1、2替换为20,其余数值保持不变。

方法二:手动封装迭代替换逻辑

如果需要自定义替换逻辑(比如添加额外条件判断),可以封装函数,通过遍历替换字典的键值对完成批量替换:

import xarray as xr
from functools import reduce

def batch_replace(da, replace_dict):
    # 用reduce累积执行每一次替换操作
    return reduce(
        lambda x, kv: x.where(x != kv[0], kv[1]),
        replace_dict.items(),
        da
    )

# 测试代码
da = xr.DataArray([0,10,10,10,2,2,2,3])
replace_dict = {10: 1, 2: 20}
result_da = batch_replace(da, replace_dict)
print(result_da)

这里借助functools.reduce简化循环逻辑,避免手动编写重复的where调用。

补充说明

  • replace()方法还支持更复杂的替换规则,比如列表映射、字符串正则匹配,完全兼容Pandas的replace语法。
  • 针对大型栅格数据,replace()内部已做性能优化,效率优于手动迭代实现。

内容的提问来源于stack exchange,提问作者Oliver Lopez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 07:14:57