Python 将netcdf文件加载到xarray数据集中时,为什么要在维度变量中引入NAN

Python 将netcdf文件加载到xarray数据集中时,为什么要在维度变量中引入NAN,python,netcdf,python-xarray,Python,Netcdf,Python Xarray,我是xarray的新手,所以我想知道我是否做错了什么 我有一个netcdf文件,其中包含三个组(a、B、C),每个组都包含几个变量,这些变量只有一个时间维度以及一个对应的“时间维度”变量。时间维度变量的值使用Unix时间戳 在下面的示例中,我打开Netcdf文件并打印出每个组的时间戳的最小值和最大值。这给了我时间戳的预期范围 然后,我使用open_dataset命令将每个组从netcdf文件加载到xarray数据集中。对于这些数据集,我再次打印出时间维度坐标时间戳的最小值和最大值。最小值与直接读

我是xarray的新手,所以我想知道我是否做错了什么

我有一个netcdf文件,其中包含三个组(a、B、C),每个组都包含几个变量,这些变量只有一个时间维度以及一个对应的“时间维度”变量。时间维度变量的值使用Unix时间戳

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

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

虽然我没有在代码中显示它,但是NAN值都位于xarray变量值数组的末尾。此外,A组包含4个NAN值,而B组包含更多的NAN值。还要注意,每个组的netcdf变量的大小与xarray变量的大小相同

有人知道为什么NAN值从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

该问题似乎是由于在从屏蔽numpy数组创建Netcdf文件变量时未指定Fill_值或缺少_值造成的

这似乎允许将屏蔽的NaN值传递到xarray数据集

当Netcdf文件变量锐化时,设置Fill_值解决了此问题