如何解决netCDF4.num2date中的错误“ ValueError:儒略日必须是正数”?

时间:2018-09-20 11:03:35

标签: python-3.x netcdf4

这是部分代码:

import netCDF4
import pandas as pd
import matplotlib.pyplot as plt

file='/Users/dedeco/Downloads/_grib2netcdf-atls12-95e2cf679cd58ee9b4db4dd119a05a8d-OzkfHp.nc'
nc = netCDF4.Dataset(file)
nc.variables.keys()

lat = nc.variables['latitude'][:]
lon = nc.variables['longitude'][:]
time_var = nc.variables['time']
dtime = netCDF4.num2date(time_var[:],time_var.units)

可以通过以下链接下载文件:https://stream.ecmwf.int/data/atls12/data/data01/scratch/84/bc/_grib2netcdf-atls12-95e2cf679cd58ee9b4db4dd119a05a8d-OzkfHp.nc

所以,我得到了这个错误:

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-47-3647c36af24c> in <module>()
      2 lon = nc.variables['longitude'][:]
      3 time_var = nc.variables['time']
----> 4 dtime = netCDF4.num2date(time_var[:],time_var.units)

cftime/_cftime.pyx in cftime._cftime.num2date()

cftime/_cftime.pyx in cftime._cftime.utime.num2date()

cftime/_cftime.pyx in cftime._cftime.DateFromJulianDay()

ValueError: Julian Day must be positive

我该如何解决?有什么想法吗?

1 个答案:

答案 0 :(得分:1)

我修复了设置参数的问题(默认为标准): calendar:描述了时间计算中使用的日历。

因此,请替换为:

dtime = netCDF4.num2date(time_var[:],time_var.units)

依据(在这种情况下,一年有365天):

dtime = netCDF4.num2date(time_var[:],time_var.units,'365_day')

Here is the documentation如下:

  

def date2num(

     

...)

     

date2num(dates,units,calendar ='standard')

     

返回给定日期时间对象的数字时间值。的单位   数字时间值由units参数和   日历关键字。 datetime对象必须使用UTC,且不包含   时区偏移。如果存在时区偏移量(单位),则为   应用于返回的数值。

     

dates:日期时间对象或日期时间对象序列。的   datetime对象不应包含时区偏移。

     

units:自   描述时间单位。可以是几天,几小时,几分钟,   秒,毫秒或微秒。是时候了   来源。

     

calendar:描述时间计算中使用的日历。所有   CF元数据约定中当前定义的值有效   日历'standard','gregorian','proleptic_gregorian''noleap',   '365_day','360_day','julian','all_leap','366_day'。默认是   “标准”,是儒略历/格里高利历的混合日历。

     

返回一个数字时间值,或者一个带有数字时间值的数组   大约毫秒精度。

可以从here找到对转换的补充理解。