从 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)。
我有一个只有两条信息的 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)。