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

如何在NetCDF文件中提取多年指定日期范围的温度数据?

刚好我之前处理过类似的NetCDF时间筛选需求,给你分享两种靠谱的方法——用Python的xarray库(适合编程自动化)和CDO工具(适合命令行快速处理),完美匹配你的数据集结构~


方法一:使用Python xarray库(灵活可编程)

你的数据集里time是维度但没有对应坐标,而days变量存储了实际的日期,所以第一步要把days设为time维度的坐标,这样就能用xarray强大的时间筛选功能了。

import xarray as xr

# 1. 读取NetCDF文件
ds = xr.open_dataset("你的文件名.nc")

# 2. 将days变量设置为time维度的坐标(关键步骤)
ds = ds.assign_coords(time=ds.days)

# 3. 构建时间筛选条件:每年5月30日至8月18日
# 逻辑:5月30日及以后 + 6-7月整月 + 8月18日及以前
time_mask = (
    ((ds.time.dt.month == 5) & (ds.time.dt.day >= 30)) |
    ((ds.time.dt.month.isin([6, 7])) |
    ((ds.time.dt.month == 8) & (ds.time.dt.day <= 18)))
)

# 4. 应用筛选条件,丢弃不符合的时间点
filtered_ds = ds.where(time_mask, drop=True)

# 5. 保存筛选后的结果到新文件
filtered_ds.to_netcdf("筛选后的温度数据_2001-2018.nc")

小提示:

  • 如果你的数据集里time维度已经是datetime类型,那跳过第2步直接筛选就行;
  • 这段代码会自动处理闰年的日期差异,不用额外调整。

方法二:使用CDO工具(命令行快速处理)

CDO(Climate Data Operators)是处理气候数据的神器,适合不想写代码的场景,有两种实现方式:

方式A:bash循环遍历每年(最准确,适配闰年)

这种方式会逐个年份筛选目标日期范围,再合并结果,完全不用担心闰年的日期偏移问题:

# 初始化临时文件列表
temp_files=""

# 遍历2001到2018年
for year in {2001..2018}; do
  # 筛选当前年份5月30日至8月18日的数据,保存为临时文件
  cdo seldate,${year}-05-30,${year}-08-18 你的文件名.nc tmp_${year}.nc
  # 将临时文件加入列表
  temp_files="${temp_files} tmp_${year}.nc"
done

# 合并所有临时文件为最终结果
cdo mergetime ${temp_files} 筛选后的温度数据_2001-2018_cdo.nc

# 清理临时文件
rm tmp_*.nc

方式B:按年积日筛选(快速但需注意闰年)

如果你的数据里没有闰年影响(或者可以忽略),可以直接按年积日筛选:5月30日对应年积日150(非闰年),8月18日对应230,命令更简洁:

# 先筛选2001-2018年,再筛选年积日150-230的日期
cdo selday,150/230 -seldate,2001-01-01,2018-12-31 你的文件名.nc 筛选后的温度数据_2001-2018_cdo.nc

小提示:

  • 确保你的系统已经安装了CDO工具(可以用cdo --version检查);
  • 方式A虽然多几步,但准确性最高,推荐优先使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 18:48:02