在Xarray中筛选≥26℃网格数据的问题及报错咨询
解决温度网格数据筛选问题
你的问题出在**sel()方法的使用场景错误**:sel()是用来通过坐标标签(比如指定time、depth等具体值)筛选数据的,不能直接传入变量的布尔条件(比如t >=26),这也是触发ValueError的原因——布尔数组无法被sel()解析为合法的筛选参数。
针对筛选温度≥26℃的数据,推荐两种正确方法:
方法1:使用where()(保留原维度,不符合项设为NaN)
where()会保留数据集的原有维度结构,将不符合条件的网格点值设为NaN,适合需要保留空间/时间框架的场景:
# 保留所有维度,不符合条件的设为NaN t26 = t.where(t >= 26) # 可选:删除全为NaN的维度(比如没有符合条件数据的深度层/时间点) t26 = t.where(t >= 26, drop=True)
方法2:直接布尔索引(提取符合条件的子集)
如果不需要保留原维度结构,直接用布尔数组索引即可提取所有温度≥26℃的数据:
t26 = t[t >= 26]
补充说明
你之前写的t.sel(t[:,:,:,:]=>26)是典型的用法错误:sel()的参数是类似{'time': '2023-01-01', 'depth': 100}这样的坐标-标签对,而非变量的条件判断。
内容的提问来源于stack exchange,提问作者Matthew Chinappa
相关产品推荐
相关产品推荐

