2017-05-03 166 views
0

我是xarray的新手,所以我想知道我是否做错了什么。为什么在将netcdf文件加载到xarray数据集中时,将NaN引入了维变量

我有一个包含三组netCDF文件(A,B,C)的每一个包含具有只是一个时间维度的若干变量以及一个相应的“time_dimension”变量。时间维度变量为其值使用Unix时间戳。

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

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

虽然我不在代码显示它时,NAN值都位于xarray变量值数组的末尾。另外,A组包含4个NAN值,而B组包含更多。另请注意,netcdf变量的大小与每个组的xarray变量相同。

有谁知道为什么NA​​N值被引入到我的时候,他们被导入到从的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 

回答

0

看来,问题是由不指定Fill_value或missing_value引起的输出当Netcdf文件变量是从掩盖的numpy数组创建的。

这似乎已让蒙面NaN值,以通过对xarray数据集进行传递。

当Netcdf文件变量折痕时设置Fill_value解决了这个问题。

相关问题