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

如何用Python的netCDF4合并同空间维度的多份netCDF数据集?

合并同空间维度的NetCDF时间序列文件

针对你要合并两个空间维度一致、时间维度分别为365的NetCDF文件的需求,最优实现方式是直接使用netCDF4库完成维度拼接,全程在内存中处理(数据量不大的情况下),步骤清晰且性能高效。

完整实现代码

import netCDF4 as nc
import numpy as np

# 1. 打开输入文件
file1 = nc.Dataset('year1.nc', 'r')
file2 = nc.Dataset('year2.nc', 'r')

# 2. 创建输出文件
output_file = nc.Dataset('combined_years.nc', 'w', format='NETCDF4')

# 3. 复制空间维度(longitude、latitude)
for dim_name in ['longitude', 'latitude']:
    dim = file1.dimensions[dim_name]
    output_file.createDimension(dim_name, len(dim) if not dim.isunlimited() else None)

# 4. 创建合并后的时间维度
total_time = len(file1.dimensions['time']) + len(file2.dimensions['time'])
output_file.createDimension('time', total_time)

# 5. 复制全局属性(可选,按需保留原文件的全局元数据)
output_file.setncatts(file1.__dict__)

# 6. 复制变量定义并拼接数据
for var_name in file1.variables:
    var_in = file1.variables[var_name]
    # 创建输出变量,维度沿用原变量的维度顺序
    var_out = output_file.createVariable(
        var_name,
        var_in.datatype,
        var_in.dimensions
    )
    # 复制变量属性(单位、描述等)
    var_out.setncatts(var_in.__dict__)
    
    # 拼接数据:时间相关变量合并,非时间变量直接复制
    if 'time' in var_in.dimensions:
        data1 = var_in[:]
        data2 = file2.variables[var_name][:]
        # 匹配time维度在变量中的索引位置,沿对应轴拼接
        time_axis = var_in.dimensions.index('time')
        combined_data = np.concatenate((data1, data2), axis=time_axis)
        var_out[:] = combined_data
    else:
        # 非时间变量(如空间坐标)直接复用第一个文件的内容
        var_out[:] = var_in[:]

# 7. 关闭所有文件
file1.close()
file2.close()
output_file.close()

关键说明

  • 维度处理:空间维度完全一致时,直接从第一个文件复制维度定义即可,无需重复读取两个文件的空间坐标。
  • 时间拼接:通过np.concatenate沿时间轴合并数据,注意匹配变量维度中time的索引位置(如果你的变量维度顺序是time/lon/lat,需调整axis参数)。
  • 属性保留:通过setncatts方法复制全局和变量的元数据,确保合并后的文件保留原有的数据描述信息。
  • 性能优化:你的案例中单个文件数据量极小(5x5x365),一次性加载处理效率最高;如果后续遇到大文件,可改为分块读取写入。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 22:50:03