python - 如何识别 xarray 中的时间、lon 和 lat 坐标?

标签 python python-xarray

确定 xarray dataArray 对象的哪些坐标包含 longitudelatitude时间?

典型的 dataArray 可能如下所示:

<xarray.Dataset>
Dimensions:    (ensemble: 9, lat: 224, lon: 464, time: 12054)
Coordinates:
  * lat        (lat) float64 25.06 25.19 25.31 25.44 ... 52.56 52.69 52.81 52.94
  * lon        (lon) float64 -124.9 -124.8 -124.7 ... -67.31 -67.19 -67.06
  * time       (time) datetime64[ns] 1980-01-01 1980-01-02 ... 2012-12-31
Dimensions without coordinates: ensemble
Data variables:
    elevation  (lat, lon) float64 dask.array<shape=(224, 464), chunksize=(224, 464)>
    temp       (ensemble, time, lat, lon) float64 dask.array<shape=(9, 12054, 224, 464), chunksize=(1, 287, 224, 464)>

一种方法可能是遍历由变量坐标标识的变量,例如 temp.coords,寻找 timestandard_name 属性>、经度纬度。但许多数据集似乎并未包含所有变量的 standard_name 属性。

我想另一种方法是搜索 units 属性并尝试确定它们是否具有适当的 units 属性(例如 degrees_eastdegrees_west 表示 longitude 等)。

有没有更好的办法?

最佳答案

MetPy package包括一些像这样的系统坐标识别助手。您可以在 xarray with MetPy tutorial 中查看其工作原理的基础知识。 .例如,如果您想要名为 temp 的 DataArray 的时间坐标(假设它来自已被 MetPy 解析的数据集),您只需调用:

temp.metpy.time

这是通过根据 CF conventions 解析坐标元数据在内部完成的.

这是一个简短的例子:

import xarray as xr
import metpy.calc as mpcalc

ds = xr.tutorial.load_dataset('air_temperature')
ds = ds.metpy.parse_cf()

x,y,t = ds['air'].metpy.coordinates('x','y','time')

print([coord.name for coord in (x, y, t)])

产生:

['lon', 'lat', 'time']

关于python - 如何识别 xarray 中的时间、lon 和 lat 坐标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53469510/

相关文章:

python - 以有效的方式用大小为 (k,m) 的 n 矩阵构建大小为 (n*k, m) 的数组

python - 在预定义的位置将一个列表中的值插入到另一个列表中

python - Python 中使用 numpy 进行多元回归

python - 如何删除xarray中的维度?

python - 如何使用 xarray 查找网格数据的每日百分位数?

python - 根据另一个列表的排序将转换应用于列表

python - 在 python 中从 Numpy Array 获取 SQL header

python - 沿 xarray 中的单个维度对多个坐标进行分组

python-3.x - 替换 xarray 中的零值

python-xarray - xarray 多维坐标数据集 swap_dims