从 Xarray 数据集中提取单个值

Extract Single Value From Xarray Dataset

我有一个只有两条信息的 Xarray 数据集,一个是 'time' 引用的时间,另一个是 'reftime' 引用的时间:

<xarray.Dataset>
Dimensions:  ()
Coordinates:
    reftime  datetime64[ns] 2020-03-31T06:00:00
    time     datetime64[ns] 2020-03-31T12:00:00
    crs      object Projection: latitude_longitude
Data variables:
    *empty*
Attributes:
    Originating_or_generating_Center:                                        ...
    Originating_or_generating_Subcenter:                                     ...
    GRIB_table_version:                                                      ...
    Type_of_generating_process:                                              ...
    Analysis_or_forecast_generating_process_identifier_defined_by_originating...
    Conventions:                                                             ...
    history:                                                                 ...
    featureType:                                                             ...
    History:                                                                 ...
    geospatial_lat_min:                                                      ...
    geospatial_lat_max:                                                      ...
    geospatial_lon_min:                                                      ...
    geospatial_lon_max:                                                      ...

其他一切都是空的。我的目标是将 'reftime' 引用的任何日期转换为字符串格式。通常,我知道这可以通过调用数据集 ['reftime'] 来完成,但要注意的是这段代码旨在 运行 在后台,有时它会在我想要的时间找到 xarray 数据集由 'reftimeX' 引用,其中 X 是某个数字。我如何提取第一个坐标中存储的任何信息(无论是 reftime、reftime1 还是 reftimeX'),以便将其存储为字符串?

我已经尝试将它变成 DataArray,希望我可以将它变成一个 numpy 数组并从那里提取字符串,但是当我尝试将它变成 DataArray 时:

filtered_dataarray = filtered_ds.to_array()

我收到一个错误:

ValueError: at least one array or dtype is required

Xarray 文档建议此函数需要一些 self 参数:

Dataset.to_array(self, dim='variable', name=None)

但到目前为止,我一直无法弄清楚这是指什么。

您可以像这样获取数据集中所有坐标的列表:

coord_names = list(ds.coords)

如果你确定你想要的坐标总是第一个,你可以通过

访问它
ds[coord_names[0]]

但是我宁愿通过坐标检查你想要的坐标的确切名称是什么。鉴于您知道它必须包含 "reftime" 您可以这样做:

reftime_name = [var for var in ds.coords if "reftime" in var][0]
ds[reftime_name]

to_array 方法没有达到您的预期。它将采用数据集的所有数据变量并将它们连接到一个新的维度。但是,您的数据集不包含任何数据变量(仅坐标),因此会引发错误。 self 参数表明 to_array 是一个对象方法。 self 是对 class 的当前实例的引用。通常,您会在对象上调用该方法(例如 ds.to_array()),然后您不需要显式传递 self 参数(另请参见 here)。