使用Xarray计算1950-2020年大气数据逐十年均值的问题咨询
逐十年大气参数均值计算解决方案
以下两种方案均可生成兼容netCDF格式的计算结果,不会出现数据类型转换错误:
方案1:基于已生成的年平均结果计算
- 第一步:为年平均数据集添加数值型十年标签
运算会自动将1950-1959年的记录标签统一设为ds_annual_means['decade'] = (ds_annual_means['year'] // 10) * 101950,1960-1969年设为1960,以此类推,标签为整型,不存在object类型问题。 - 第二步:按十年标签分组求均值
ds_decade_means = ds_annual_means.groupby('decade').mean() - 可选优化:若需保留
datetime64[ns]类型的时间坐标,可将十年标签转换为对应区间的起始日期:import pandas as pd ds_decade_means = ds_decade_means.assign_coords( time = lambda x: [pd.to_datetime(f"{d}-01-01") for d in x['decade'].values] ) # 可按需删除多余的decade字段 ds_decade_means = ds_decade_means.drop_vars('decade')
方案2:直接从原始观测数据计算(精度更高)
无需先单独计算年平均,直接从原始带time维度的数据集处理,避免两次平均带来的精度损失:
# 为原始数据集添加十年标签 ds['decade'] = (ds.time.dt.year // 10) * 10 # 直接分组计算十年均值 ds_decade_means = ds.groupby('decade').mean()
结果导出
两种方案输出的数据集均可直接调用xarray内置方法保存为nc文件:
ds_decade_means.to_netcdf("decade_mean_result.nc")
内容的提问来源于stack exchange,提问作者Maya WillStep
相关产品推荐
相关产品推荐

