这是部分代码:
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)
所以,我得到了这个错误:
---------------------------------------------------------------------------
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
我该如何解决?有什么想法吗?
答案 0 :(得分:1)
我修复了设置参数的问题(默认为标准): calendar:描述了时间计算中使用的日历。
因此,请替换为:
dtime = netCDF4.num2date(time_var[:],time_var.units)
依据(在这种情况下,一年有365天):
dtime = netCDF4.num2date(time_var[:],time_var.units,'365_day')
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找到对转换的补充理解。