You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将多个NetCDF文件中的变量合并为单个NetCDF文件

问题解答

你的场景应该使用xarray.concat实现,不要用xarray.merge。

两个函数的核心区别

  • xarray.merge:用于合并不同变量/非重叠坐标的数据集,适用场景是多个文件存储不同变量、其他维度完全匹配,例如一个文件存u流速、一个文件存v流速,需要把两个变量拼到同一个数据集时使用。
  • xarray.concat:用于沿着指定的已有维度堆叠结构完全一致的数据集/变量,正好匹配你当前两个文件都包含u/v/w三个流速变量、仅时间步不同的时间序列拼接场景。

具体实现方法

方法1:基于你现有代码修改

你已经单独提取了两个文件的u/v/w变量,可以直接对同变量沿time维度拼接,再重组为完整数据集后导出:

import netCDF4
import pandas as pd
import numpy as np
import xarray as xr

df1 = xr.open_dataset("ocean_avg_November.nc4") # 2013年11月NetCDF文件
df2 = xr.open_dataset("ocean_avg_December.nc4") # 2013年12月NetCDF文件
du1 = df1['u'] # x方向海流流速
dv1 = df1['v'] # y方向海流流速
dw1 = df1['w'] # 垂直方向海流流速
du2 = df2['u']
dv2 = df2['v']
dw2 = df2['w']

# 沿时间维度拼接同变量
u_comb = xr.concat([du1, du2], dim="time")
v_comb = xr.concat([dv1, dv2], dim="time")
w_comb = xr.concat([dw1, dw2], dim="time")

# 组装为完整数据集
comb_ds = xr.Dataset({
    "u": u_comb,
    "v": v_comb,
    "w": w_comb
})

# 导出为合并后的NetCDF文件
comb_ds.to_netcdf("ocean_avg_2013Nov_Dec.nc")

方法2:更简便的全数据集拼接

因为两个NetCDF文件的变量、空间维度(经纬度、深度)结构完全一致,不需要单独提取变量,直接拼接整个数据集即可:

# 建议拼接前先给每个文件赋值正确的时间坐标,避免时间值重复/错乱
df1 = df1.assign_coords(time=pd.Timestamp("2013-11-01"))
df2 = df2.assign_coords(time=pd.Timestamp("2013-12-01"))

# 直接沿时间维度拼接两个完整数据集
comb_ds = xr.concat([df1, df2], dim="time")
comb_ds.to_netcdf("ocean_avg_2013Nov_Dec.nc")

方法3:批量读取多文件自动拼接

如果后续你有更多月份的文件需要合并,不需要逐个手动打开文件,可以用xarray.open_mfdataset批量匹配文件、自动沿时间维度拼接:

# *为通配符,匹配所有文件名符合ocean_avg_开头的nc4文件
comb_ds = xr.open_mfdataset(
    "ocean_avg_*.nc4",
    concat_dim="time",
    combine="nested"
)
comb_ds.to_netcdf("ocean_avg_merged_timeseries.nc")

注意事项

如果拼接后发现时间维度数值异常(比如两个时间步的值完全相同),优先检查单个原始文件的time坐标值,按照方法2里的assign_coords方式手动给每个文件赋予正确的时间戳即可。

内容的提问来源于stack exchange,提问作者Omi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 08:27:03