如何知道切片 xarray Dataset/DataArray 是否为空?

How to know if a sliced xarray Dataset/DataArray is empty?

我正在使用 Python 语言对 Netcdf 文件应用切片和聚合操作。处理此类文件的解决方案之一是使用 Xarray 库。

我对库功能还是陌生的,所以我想知道 Xarray 对象是否有一些方法来检查切片 DataSet/DataArray 是否为空,就像 Pandas 有 (在pandas的情况下,可以通过'empty'方法检查dataframe/series是否为空。

我找到的唯一解决方案是始终将 Xarray Dataset/DataArray 转换为 pandas Dataframe/Series,然后检查它是否为空。

示例代码如下:

import xarray as xr

path = 'my_path_to_my_netcdf_file.nc'

Xarray_DataArray = xr.open_dataset(path)

print(Xarray_DataArray)

# this returns something like:

 #     Dimensions:      (lat: 600, lon: 672, time: 37)
 #     Coordinates:
 #     * lat          (lat) float32 -3.9791672 -3.9375012 ... 20.9375 20.979166
 #     * lon          (lon) float32 -60.979168 -60.9375 ... -33.0625 -33.020832
 #     * time         (time) datetime64[ns] 2010-05-19 2010-05-20 ... 2010-06-24
 #     Data variables:
 #       variable_name  (time, lat, lon) float32 dask.array<shape=(37, 600, 672), 
 #         chunksize=(37, 600, 672)>

 # I normally use the 'sel' method to slice the xarray object, like below:

Sliced_Xarray_DataArray = Xarray_DataArray.sel({'lat':slice(-10, -9),
                                                'lon':slice(-170, -169)                  
                                                })


 # but since, Xarray does not possess a proper way to check the slice, I usually have to do the following:

 if Sliced_Xarray_DataArray.to_dataframe().empty():
    print('is empty. Nothing to aggregate')

 else:
    Aggregated_value =  Aggregation_function(Sliced_Xarray_DataArray)

    print('continuing with the analysis')


 #    ... continue

如有任何建议,我将不胜感激。

感谢您的宝贵时间,希望尽快收到您的来信。

此致,

菲利普·里尔

您可以很容易地检查结果切片中变量的大小是否为 0:

print(Sliced_Xarray_DataArray.time.size)
if Sliced_Xarray_DataArray.time.size == 0:
    print('is empty. Nothing to aggregate')
else:
    print('not empty. Go aggregate')

您的任何坐标变量以及我们的其他变量都可以作为 Sliced_Xarray_DataArray 中的属性进行访问,因此在您的示例中,您可以检查 latlontime