Python Metpy平流计算问题[已解决]

Python Metpy平流计算问题[已解决],python,metpy,Python,Metpy,我下载了覆盖[30°W-30°E;0-20°N]区域的ERA5 netcdf数据。 下载的数据包含水平风分量(u、v)和比湿度(q)。 我需要通过使用Metpy函数计算湿度的水平平流平流 我得到这个错误 /usr/local/lib/python3.8/dist-packages/metpy/xarray.py:1445: UserWarning: Vertical dimension number not found. Defaulting to (..., Z, Y, X) order.

我下载了覆盖[30°W-30°E;0-20°N]区域的ERA5 netcdf数据。 下载的数据包含水平风分量(u、v)和比湿度(q)。 我需要通过使用Metpy函数计算湿度的水平平流平流

我得到这个错误

/usr/local/lib/python3.8/dist-packages/metpy/xarray.py:1445: UserWarning: Vertical dimension number not found. Defaulting to (..., Z, Y, X) order.
  warnings.warn(
Traceback (most recent call last):
  File "temp_avect_calc.py", line 33, in <module>
    adv = mpcalc.advection(q, [u, v], (dx, dy))
  File "/usr/local/lib/python3.8/dist-packages/metpy/xarray.py", line 1470, in wrapper
    grid_deltas_from_dataarray(grid_prototype, kind='actual')
  File "/usr/local/lib/python3.8/dist-packages/metpy/xarray.py", line 1380, in grid_deltas_from_dataarray
    geod=f.metpy.pyproj_crs.get_geod()))
  File "/usr/local/lib/python3.8/dist-packages/metpy/xarray.py", line 253, in pyproj_crs
    return self.crs.to_pyproj()
  File "/usr/local/lib/python3.8/dist-packages/metpy/xarray.py", line 233, in crs
    raise AttributeError('crs attribute is not available.')
AttributeError: crs attribute is not available.

根据您提供的错误,看起来您正在使用MetPy 1.0。如果是这种情况,
metpy.calc.advection
的函数签名已更改[],也可以使用xarray[]进行简化。您可以放弃计算栅格间距,因为这将从您的纬度和经度坐标中拉入。为了实现这一点,您必须显式地让MetPy解析数据集中的一些信息,以创建
crs
信息,在本例中,这些信息来自您的纬度和经度。下面的示例应适用于MetPy 1.0上的数据

ds = xr.open_dataset(fname).metpy.parse_cf()

adv = mpcalc.advection(ds["q"], ds["u"], ds["v"])

如错误所述,数据缺少crs属性。请检查这是否在原始数据中。如果它不是,并且数据是一个合适的网格,您可能可以添加它
ds = xr.open_dataset(fname).metpy.parse_cf()

adv = mpcalc.advection(ds["q"], ds["u"], ds["v"])