Xarray按经度范围筛选报错:NameError: name 'lon' is not defined
正确的经度筛选方法
你遇到的NameError是因为sel()方法仅支持标签匹配,不能直接使用lon>-4这类比较表达式——这里的lon是Xarray数据集里的坐标变量,不是Python全局变量,所以会提示未定义。
下面是几种可行的解决方法:
方法1:用sel()结合slice(推荐,高效简洁)
如果你的经度坐标是有序排列的(绝大多数NetCDF气象/地理数据都是如此),直接在sel()中用slice指定范围即可:
import datetime # 一步完成时间+经度筛选 data_9 = ds.sel(time=datetime.time(9), lon=slice(-4, 44))
方法2:用where()处理复杂条件
如果需要保留原维度(不符合条件的位置设为NaN),或者经度坐标无序,用where():
import datetime data_9 = ds.sel(time=datetime.time(9)).where( (ds.lon > -4) & (ds.lon < 44), # 用ds.lon引用数据集内的经度变量 drop=True # 可选:删除全为NaN的维度,精简结果 )
注意:多个条件要用&连接,且每个条件要加括号。
方法3:用query()实现类SQL筛选
如果习惯SQL风格的语法,可以用query()(需要依赖pandas):
import datetime data_9 = ds.sel(time=datetime.time(9)).query('lon > -4 and lon < 44')
内容的提问来源于stack exchange,提问作者ImFabien75
相关产品推荐
相关产品推荐

