如何在xarray中删除无维度的坐标与变量?
删除xarray Dataset中所有无维度的坐标与变量
针对你提供的示例数据集:
import xarray as xr ds = xr.Dataset( {"temperature": (["x", "y"], [[1, 2, 3], [1, 2, 3], [1, 2, 3]]), "nothing": 10}, coords={"item": "hi", "x": [1, 2, 3], "y": [1, 2, 3]}, )
无需手动指定变量/坐标名称,有以下几种实现方式:
方法1:批量删除所有无维度元素
利用drop_vars结合列表推导式,自动识别所有无维度(ndim == 0)的变量和坐标并删除:
# 自动筛选并删除所有无维度的变量/坐标 ds_filtered = ds.drop_vars([var for var in ds.variables if ds[var].ndim == 0])
ds.variables包含了Dataset中所有的变量和坐标,通过判断每个元素的维度数是否为0,批量收集需要删除的名称,一次性完成删除操作。
方法2:仅保留指定维度的变量与维度坐标
如果需求是严格保留维度为(x,y)的变量,同时保留维度对应的坐标x、y,可以直接筛选目标元素:
# 确定要保留的变量(维度为x,y)和维度坐标 keep_vars = [k for k in ds.data_vars if ds[k].dims == ("x", "y")] + list(ds.dims) # 生成筛选后的Dataset ds_filtered = ds[keep_vars]
这种方式直接明确保留范围,自动排除不符合条件的无维度元素(如nothing、item)。
方法3:重新构建Dataset(分步筛选)
也可以分步筛选变量和坐标,再重新组合成新的Dataset:
# 筛选有维度的变量 filtered_data_vars = {k: v for k, v in ds.data_vars.items() if v.ndim > 0} # 筛选有维度的坐标(自动保留x、y这类维度坐标) filtered_coords = {k: v for k, v in ds.coords.items() if v.ndim > 0} ds_filtered = xr.Dataset(filtered_data_vars, coords=filtered_coords)
内容的提问来源于stack exchange,提问作者blaylockbk
相关产品推荐
相关产品推荐

