[英]Why is xarray introducing random numbers to a variable inside a NetCDF4 file when loading?
[英]Why are NaNs introduced into dimension variable when loading a netcdf file into xarray dataset
我是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变量相同。
有谁知道为什么从netcdf导入NAN值时将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()
这是上面代码的输出
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
似乎是由于从被掩码的numpy数组创建Netcdf文件变量时,未指定Fill_value或missing_value引起的。
这似乎允许将屏蔽的NaN值传递到xarray数据集。
设置Netcdf文件变量时设置Fill_value解决了此问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.