Python - 从netCDF文件读取数据,时间为“自测量开始以来的秒数”

时间:2015-11-29 16:53:45

标签: python netcdf

我需要从netCDf文件中提取值。我对python很新,甚至更新这个文件格式。我需要在特定位置(lat,lon)提取时间序列数据。 我发现在UNIX时间有一个变量(称为“base_time”)和另一个带有“自2013-20-10 00:00:00以来的秒数”的变量(称为“时间”)(这是测量时间的开始) UTC)现在。

当我询问数据集的变量时,我得到了这个:

<type 'netCDF4.Variable'>
int32 base_time()
    units: seconds since 1970-01-01 00:00:00 00:00
unlimited dimensions:
current shape = ()
filling off

<type 'netCDF4.Variable'>
float64 time(time)
    units: seconds since 2013-10-20 00:00:00 00:00
    interval(sec): 30.0
unlimited dimensions: time
current shape = (2880,)
filling off

当我将值读取为数组时,例如

time_var = dataset.variables['time'][:]

我可以看到时间变量中有2880(大小是2880)值,但base_time变量中只有一个(大小为1)。 我认为this答案完全符合我的要求,但我只对需要转换时间的部分感到麻烦。当我这样做时:

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

我收到错误:

AttributeError: 'numpy.ndarray' object has no attribute 'units'

我认为我需要转换时间变量(自测量开始以来的秒数),而不是转换UNIX时间(因为netCDf文件中只有一个值?)。 我尝试了datetime.dateime部分的一些变体,但我只是没有得到它。我只需要将“自2013-10-20 00:00:00以来的秒数”转换为可读格式,以便能够提取和绘制数据。 谢谢!

1 个答案:

答案 0 :(得分:7)

很抱歉这篇文章很冗长,但这是我最近刚刚遇到并掌握的内容。

在基于numpy的python NetCDF4 api中,NetCDF4.Variable与它包含的numpy数据数组之间存在深刻的差异。你的代码:

time_var = dataset.variables['time'][:]

不是NetCDF4变量,即不是time_var而只是数据值,数字的numpy ndarray,NetCDF变量属性丢失,在这种情况下units

units: seconds since 2013-10-20 00:00:00 00:00.

你想要的是:

time_var = dataset.variables['time']

然后:

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

应该按预期工作。