如何在xarray中将坐标分配给维度?两种实现方式
问题描述
假设现有如下数据集:
>>> coords = {"coords": ("x", [10, 20, 30, 40])} >>> dset = xr.Dataset(coords=coords) >>> dset <xarray.Dataset> Dimensions: (x: 4) Coordinates: coords (x) int64 10 20 30 40 Dimensions without coordinates: x Data variables: *empty*
需要修改该数据集,让xarray将coords分配给维度x,即维度x不再是无坐标维度,coords作为其对应坐标。请提供两种实现方式:
- 修改数据集的创建方式
- 事后“修复”已有的数据集
解决方案
1. 修改数据集创建方式
创建数据集时,直接将坐标名称设为维度名x,xarray会自动把该坐标与维度x绑定:
>>> coords = {"x": [10, 20, 30, 40]} >>> dset = xr.Dataset(coords=coords) >>> dset <xarray.Dataset> Dimensions: (x: 4) Coordinates: * x (x) int64 10 20 30 40 Data variables: *empty*
如果需要保留coords作为坐标的属性名,可显式指定维度关联并添加属性:
>>> coords = {"x": ("x", [10, 20, 30, 40], {"name": "coords"})} >>> dset = xr.Dataset(coords=coords)
2. 事后修复已有数据集
针对已创建的数据集,有两种常用修复方式:
方式一:重命名坐标自动绑定维度
直接将coords重命名为x,xarray会自动把它绑定到维度x:
dset_fixed = dset.rename({"coords": "x"})
方式二:手动绑定维度坐标
若需保留coords作为坐标名,可手动将其指定为维度x的坐标:
# 方法1:删除无坐标维度后重新分配坐标 dset_fixed = dset.drop_dims("x").assign_coords(x=dset["coords"]) # 方法2:替换维度坐标后删除原变量 dset["x"] = dset["coords"] dset = dset.drop_vars("coords")
内容的提问来源于stack exchange,提问作者Ben Farmer
相关产品推荐
相关产品推荐

