【问题标题】:Why are NaNs introduced into dimension variable when loading a netcdf file into xarray dataset将netcdf文件加载到xarray数据集中时,为什么将NaN引入维度变量
【发布时间】:2017-10-01 15:11:47
【问题描述】:

我是 xarray 的新手,所以我想知道我是否做错了什么。

我有一个 netcdf 文件,其中包含三个组(A、B、C),每个组都包含几个只有时间维度的变量以及相应的“time_dimension”变量。时间维度变量的值使用 Unix 时间戳。

在下面的示例中,我打开 Netcdf 文件并打印出每个组的时间戳的最小值和最大值。这给了我预期的时间戳范围。

然后,我使用 open_dataset 命令将 netcdf 文件中的每个组加载到 xarray 数据集中。对于这些数据集,我再次打印出时间维度坐标时间戳的最小值和最大值。最小值与直接读取 netcdf 文件得到的值相同,但最大值包含两个组(A 和 B)的 NAN。

虽然我没有在代码中展示出来,但是 NAN 值都位于 xarray 变量值数组的末尾。此外,A 组包含 4 个 NAN 值,而 B 组包含更多。另请注意,netcdf 变量的大小与每个组的 xarray 变量相同。

有谁知道为什么当 NAN 值从 netcdf 导入 xarray 时,它们会被引入我的时间维度坐标中?

这是我用来演示问题的代码

import xarray as XR
from netCDF4 import Dataset

Filename = r'C:\temp\My_data.nc'

#-------------- load netcdf data directly -----------

print('netcdf')  

root = Dataset(Filename,'r',format='NETCDF4')
grp = root.groups['A']
dt = grp.variables['time_dimension'][:]
print('group A: ',min(dt), max(dt))

grp = root.groups['B']
dt = grp.variables['time_dimension'][:]
print('group B: ',min(dt), max(dt))

grp = root.groups['C']
dt = grp.variables['time_dimension'][:]
print('group C: ',min(dt), max(dt))

root.close()

print('   ')
print('   ')

#-------------- load netcdf data via xarray -----------

print('xarray loaded from netcdf')

ax = XR.open_dataset(Filename, group='A', decode_times=False)
dt = ax['time_dimension'].values
print('group A: ', min(dt), max(dt))
ax.close()

ax = XR.open_dataset(Filename, group='B', decode_times=False)
dt = ax['time_dimension'].values
print('group B: ', min(dt), max(dt))
ax.close()

ax = XR.open_dataset(Filename, group='C', decode_times=False)
dt = ax['time_dimension'].values
print('group C: ', min(dt), max(dt))
ax.close()

这是上面代码的输出

netcdf
group A:  1417532400.0 1480406400.0
group B:  1392129000.0 1439217000.0
group C:  1432913400.0 1436888700.0


xarray loaded from netcdf
group A:  1417532400.0 9.96920996839e+36
group B:  1392129000.0 9.96920996839e+36
group C:  1432913400.0 1436888700.0

【问题讨论】:

    标签: python netcdf python-xarray


    【解决方案1】:

    问题似乎是由于当 Netcdf 文件变量是从屏蔽的 numpy 数组创建时未指定 Fill_value 或 missing_value 引起的。

    这似乎允许将掩码的 NaN 值传递到 xarray 数据集。

    在 Netcdf 文件变量被折叠时设置 Fill_value 解决了这个问题。

    【讨论】:

      猜你喜欢
      • 2016-09-07
      • 1970-01-01
      • 2022-01-03
      • 2021-03-06
      • 1970-01-01
      • 2023-01-07
      • 1970-01-01
      • 1970-01-01
      • 2021-09-19
      相关资源
      最近更新 更多