2017-05-03 167 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解決了這個問題。

相關問題