我是新来的,所以我想知道我是否做错了什么。在
我有一个netcdf文件,包含三个组(a、B、C),每个组都包含几个变量,其中只有一个时间维,还有一个对应的“time_dimension”变量。time维度变量的值使用Unix时间戳。在
在下面的示例中,我打开Netcdf文件并打印出每个组的时间戳的最小值和最大值。这给了我预期的时间戳范围。在
然后,我使用open_dataset命令将netcdf文件中的每个组加载到xarray数据集中。对于这些数据集,我再次打印出时间维度坐标时间戳的最小值和最大值。最小值与直接读取netcdf文件得到的值相同,但最大值包含两个组(A和B)的nan。在
虽然我没有在代码中显示它,但是NAN值都位于xarray变量值数组的末尾。此外,组A包含4个NAN值,而组B包含更多。还要注意,netcdf变量的大小与每个组的xarray变量的大小相同。在
有人知道为什么在从netcdf导入xarray时,NAN值会被引入到我的时间维度坐标中吗?在
这是我用来演示问题的代码
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()
这是上面代码的输出
^{2}$
这个问题似乎是由于在Netcdf文件变量是从屏蔽的numpy数组创建的时没有指定填充值或缺少值引起的。在
这似乎允许将屏蔽的NaN值传递给xarray数据集。在
在Netcdf文件变量增加时设置Fill_值可以解决这个问题。在
相关问题 更多 >
编程相关推荐