如何重命名作为字符串的 xarray dataArray?

How to rename xarray dataArray that is a string?

我正在使用具有约 130 个数据变量的大型 HDF4 数据集。每个数据变量的名称都是一个字符串,我想将它们重命名为 1 个单词(例如 'Surface pressure' 到 'Surface_pressure'。由于它们是一个字符串,我无法使用大多数功能,例如作为 dataArray.where。我只能使用数据集 ['dataArray_1'] 访问每个变量,这不太理想。我希望能够使用 dataset.dataArray。

我试过使用 dataArray.rename,但运气不好。我已经复制并粘贴了下面的错误。

In: data=('test.h4')
    DS=xr.open_dataset(data)

In: DS['Surface pressure']

Out: <xarray.DataArray 'Surface pressure' (Footprints: 25590)>
array([1006.09015, 1006.09015, 1006.09015, ...,  997.5478 ,  997.5478 ,
        997.5478 ], dtype=float32)
Dimensions without coordinates: Footprints
Attributes:
    units:        hectoPascal
    format:       F18.9
    valid_range:  [   0. 1100.]

In: DS.rename({'Surface pressure':'Surface_pressure'})

In: DS.Surface_pressure

Out: ---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-13-6b1398c52ba1> in <module>
----> 1 DS.Surface_pressure

/anaconda3/lib/python3.7/site-packages/xarray/core/common.py in __getattr__(self, name)
    177                     return source[name]
    178         raise AttributeError("%r object has no attribute %r" %
--> 179                              (type(self).__name__, name))
    180 
    181     def __setattr__(self, name, value):

AttributeError: 'Dataset' object has no attribute 'Surface_pressure'

我希望看到 xarray.DataArray 相反的错误,我不确定接下来要尝试什么。

Xarray 的 rename() returns 一个 new 数据集对象,而不是修改现有的就地。所以让它做你想做的事情应该像覆盖 DS 变量一样简单,例如

DS = DS.rename({'Surface pressure':'Surface_pressure'})

Python 中的一些简单字符串操作应该可以直接将所有现有变量重命名为您想要的形式,例如,

name_map = {k: k.replace(' ', '_').lower() for k in DS}
DS = DS.rename(name_map)