如何在使用xarray加载NETCDF文件时解码时间变量

问题描述 投票:0回答:1

我有一个netcdf文件,给出了从1948年到2008年的月降水量值。时间变量的格式如下:

float time(time) ;
        time:units = "months since 1948-01-01 00:00:00" ;
        time:time_origin = "01-JAN-1948:00:00:00" ;

当我尝试使用Xarray使用以下命令打开数据集时

ds=xr.open_dataset("C:/Users/vsri/Downloads/prcp_monthly_1948-2008.nc")

我收到以下错误

ValueError: unable to decode time units 'months since 1948-01-01 00:00:00' with the default calendar. Try opening your dataset with decode_times=False.

如果我使用decode_Times = False参数,则时间变量具有分配给它的浮点值(如下所示)

 Coordinates:
      * longitude  (longitude) float32 0.25 0.75 1.25 1.75 ... 358.75 359.25 359.75
      * latitude   (latitude) float32 -89.75 -89.25 -88.75 ... 88.75 89.25 89.75
      * z       (z) float32 0.0
      * time (time) float32 0.0 1.0 2.0 3.0 4.0 ... 728.0 729.0 730.0 731.0

我不想使用decode_Times = False,因为我不能再对数据集使用xarray的resample函数了。

有人可以指导我如何确保xarray使用正确的时间戳而不是浮点读取数据集吗?

datetime netcdf python-xarray
1个回答
1
投票

感谢您的评论中的更新。在您的情况下,由于您的数据具有常规频率,因此我建议您使用pandas.date_range创建自己的时间坐标来解决此问题:

import pandas as pd
import xarray as xr

ds = xr.open_dataset("C:/Users/vsri/Downloads/prcp_monthly_1948-2008.nc",
        decode_times=False)
units, reference_date = ds.time.attrs['units'].split('since')
ds['time'] = pd.date_range(start=reference_date, periods=ds.sizes['time'], freq='MS')

这将创建一个从1948-01-01开始的每个月的第一个日期的数组,并结束适当的月数。

© www.soinside.com 2019 - 2024. All rights reserved.