Python - 从 netCDF 文件读取数据,时间为 "seconds since"测量开始

标签 python netcdf

我需要从 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 answer 完全符合我的需要,但我只在需要转换时间的部分遇到麻烦。当我这样做时:

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 以来的秒数”转换为可读格式,以便能够提取和绘制数据。 谢谢!

最佳答案

抱歉说得冗长,但这是我最近遇到并掌握的东西。

在基于 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 文件读取数据,时间为 "seconds since"测量开始,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33985339/

相关文章:

r - 编写netcdf时设置坐标系

python - 如何从模型内部访问模型字段值?

python - 成员每组出现一次的唯一对组

python - 在 Python 中增量读取大型多部分压缩文本文件

netcdf - 使用 nco 连接具有不同变量的 netcdf 文件

python - matplotlib/cartopy Mollweide 投影中经度环绕的接缝

r - 在 R 中创建多维 NetCDF

python - 如何将单列项目放入单行中?

python - 即使提供了良好的猜测,scipy curve_fit 也根本无法正确拟合?

c - C 中的动态连续 3D 数组