Python - 从netCDF文件中读取数据,时间为“自测量开始以来的秒数”
Posted
技术标签:
【中文标题】Python - 从netCDF文件中读取数据,时间为“自测量开始以来的秒数”【英文标题】:Python - Read data from netCDF file with time as "seconds since" beginning of measurement 【发布时间】:2016-03-03 07:20:37 【问题描述】:我需要从 netCDf 文件中提取值。我对 python 很陌生,甚至对这种文件格式也很陌生。我需要在特定位置(纬度、经度)提取时间序列数据。 我发现在 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'][:]
我可以看到 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】:对不起,我很抱歉,但这是我最近遇到并掌握的。
在基于 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)
应该按预期工作。
【讨论】:
以上是关于Python - 从netCDF文件中读取数据,时间为“自测量开始以来的秒数”的主要内容,如果未能解决你的问题,请参考以下文章
netcdf4-python:随着从 netcdf 对象多次调用切片数据,内存增加