2017-05-03 10 views
0

xarray를 처음 사용하므로 잘못된 작업을하고 있는지 알고 싶습니다.netcdf 파일을 xarray 데이터 세트로로드 할 때 치수 변수에 NaN이 도입되는 이유

각각 'time_dimension'변수뿐만 아니라 시간 차원 만 갖는 여러 변수가 포함 된 세 개의 그룹 (A, B, C)을 포함하는 netcdf 파일이 있습니다. 시간 차원 변수는 값에 유닉스 타임 스탬프를 사용합니다.

아래 예제에서는 Netcdf 파일을 열고 각 그룹의 타임 스탬프의 최소 및 최대 값을 인쇄합니다. 이것은 나에게 시간 소인의 예상 범위를 제공합니다.

그런 다음 open_dataset 명령을 사용하여 netcdf 파일의 각 그룹을 xarray 데이터 세트로로드합니다. 이 데이터 세트의 경우 시간 차원 좌표 타임 스탬프의 최소 및 최대 값을 다시 인쇄합니다. min 값은 netcdf 파일을 직접 읽음으로써 얻은 것과 동일하지만 최대 값에는 두 개의 그룹 (A와 B)에 대한 NAN이 포함됩니다.

코드에 표시하지 않지만 NAN 값은 모두 xarray 변수 값 배열의 끝에 있습니다. 또한 그룹 A에는 4 개의 NAN 값이 포함되어 있었고 그룹 B에는 상당히 많은 수가 포함되어있었습니다. 또한 netcdf 변수의 크기는 각 그룹의 xarray 변수와 같습니다.

NAL 값을 netcdf에서 xarray로 가져올 때 내 시간 차원 좌표에 NAN 값이 도입되는 이유를 아는 사람이 있습니까?

이 I 문제

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를 설정하면이 문제가 해결됩니다.