尝试在python中将netcdf时间转换为datetime时出错



我想读取netcdf文件,并将单位天数的时间转换为python日期时间对象,当我尝试使用num2date((函数时,出现了这个错误,我不知道如何处理

import netCDF4 as nc
import numpy as np
import datetime as dt
# from cftime import num2pydate
# from netCDF4 import Dataset, num2date
src = nc.Dataset("sconcaerh2o_monthly_IITB_WRF_Chem_NCAP.nc")
# print(src.ncattrs())
# print(src.CDI)
print(src.variables.keys())
dim = src.variables["sconcaerh2o"]
print(dim.dimensions[0])
times = src.variables["time"]
print(times.units)
dates = nc.num2pydate(times[0], units = times.units, calendar=times.calendar)
cdt = dt.datetime.now()
# print(nc.date2num(cdt, times.units))

输出为

Traceback (most recent call last):
File "demo.py", line 15, in <module>
dates = num2pydate(times[0], units = times.units, calendar=times.calendar)
File "src/cftime/_cftime.pyx", line 299, in cftime._cftime.num2pydate
File "src/cftime/_cftime.pyx", line 499, in cftime._cftime.num2date
File "src/cftime/_cftime.pyx", line 107, in cftime._cftime._dateparse
File "src/cftime/_cftime.pyx", line 696, in cftime._cftime._parse_date
TypeError: int() argument must be a string, a bytes-like object or a number, not 'NoneType'

如果没有关于数据集的更多信息,就有点难以理解您所得到的错误。看起来您放入num2date的某个变量没有正确设置为值,而是设置为None

您的代码中也有错误,netCDF4模块没有num2pydate()函数,并且在您的输出中创建错误的行与您发布的代码中的行不匹配。

但是,如果您试图将netCDF时间转换为python datetime.datetime对象,则可以使用netCDF模块中的num2date()函数及其一些关键字选项来实现:only_use_python_datetimesonly_use_cftime_datetimes

默认情况下,only_use_cftime_datetimes设置为True,因此num2date将始终返回cft.datetime对象。如果您将其设置为false:

dates = nc.num2pydate(times, units = times.units, calendar=times.calendar,
only_use_cftime_datetimes=False)

如果可能,num2date将返回python datetime.datetimes,如果不可能,则返回cft.datetimes。如果你想更严格,你也可以将only_use_python_datetimes设置为True:

dates = nc.num2pydate(times, units = times.units, calendar=times.calendar,
only_use_cftime_datetimes=False,
only_use_python_datetimes=True)

num2py将只返回python datetime.datetime对象,如果不可能,则会引发错误。

最新更新