如何用同一坐标替换xarray.Dataset中的两个同长坐标?
替换xarray.Dataset中多坐标为单一坐标的便捷方法
没问题,这事儿用xarray的内置方法就能轻松搞定,不用写复杂的循环。针对你给出的示例,咱们可以通过重命名维度+替换坐标的组合操作一步到位,彻底移除旧坐标,让变量都绑定到新坐标上。
直接上可运行的代码,看完你就明白怎么操作了:
import xarray as xr ds = xr.Dataset({ "a": ("a_coord", [0, 1, 2]), "b": ("b_coord", [50, 10, 20]), "a_coord": [4, 8, 9], "b_coord": [3, 1, 4], "new_coord": [0, 1, 2], }) # 核心操作:批量替换坐标并清理旧数据 ds_new = ( ds # 把a、b的旧维度名批量替换为new_coord .rename_dims({"a_coord": "new_coord", "b_coord": "new_coord"}) # 给新维度绑定new_coord的数值,同时覆盖旧坐标关联 .assign_coords(new_coord=ds["new_coord"]) # 删掉没用的旧坐标变量 .drop_vars(["a_coord", "b_coord"]) ) print(ds_new)
运行后输出的结果完全符合需求:
<xarray.Dataset> Dimensions: (new_coord: 3) Coordinates: * new_coord (new_coord) int64 0 1 2 Data variables: a (new_coord) int64 0 1 2 b (new_coord) int64 50 10 20
简单拆解下逻辑:
rename_dims只是修改维度的“名称标签”,把变量原来的旧维度名换成目标新维度名;assign_coords给新维度真正绑定上new_coord的数值,完成坐标的实质替换;- 最后用
drop_vars清理掉不再需要的旧坐标变量,让数据集更整洁。
如果你的变量数量更多,只需要把所有旧维度名加到rename_dims的字典里就行,完全支持批量操作,非常高效。
内容的提问来源于stack exchange,提问作者mrzo
相关产品推荐
相关产品推荐

