如何读取名为" T"的变量与xarray?

时间:2016-10-26 19:44:36

标签: python-xarray

所有

这可能是常见问题解答,但我的Google-fu让我失望了。也就是说,我读了一个由我使用xarray a la:

处理的天气模型生成的文件
In [4]: data = xr.open_dataset("test_old.nc4")

In [5]: data
Out[5]: 
<xarray.Dataset>
Dimensions:  (lat: 49, lev: 48, lon: 96, time: 1)
Coordinates:
  * lon      (lon) float64 -180.0 -176.2 -172.5 -168.8 -165.0 -161.2 -157.5 ...
  * lat      (lat) float64 -90.0 -86.25 -82.5 -78.75 -75.0 -71.25 -67.5 ...
  * lev      (lev) float64 1e+03 975.0 950.0 925.0 900.0 875.0 850.0 825.0 ...
  * time     (time) datetime64[ns] 2000-04-15
Data variables:
    H        (time, lev, lat, lon) float64 nan nan nan nan nan nan nan nan ...
    O3       (time, lev, lat, lon) float64 nan nan nan nan nan nan nan nan ...
    OMEGA    (time, lev, lat, lon) float64 nan nan nan nan nan nan nan nan ...
    PHIS     (time, lat, lon) float64 2.605e+04 2.605e+04 2.605e+04 ...
    PS       (time, lat, lon) float64 6.984e+04 6.984e+04 6.984e+04 ...
    QI       (time, lev, lat, lon) float64 nan nan nan nan nan nan nan nan ...
    QL       (time, lev, lat, lon) float64 nan nan nan nan nan nan nan nan ...
    QV       (time, lev, lat, lon) float64 nan nan nan nan nan nan nan nan ...
    RH       (time, lev, lat, lon) float64 nan nan nan nan nan nan nan nan ...
    SLP      (time, lat, lon) float64 9.973e+04 9.973e+04 9.973e+04 ...
    T        (time, lev, lat, lon) float64 nan nan nan nan nan nan nan nan ...
    U        (time, lev, lat, lon) float64 nan nan nan nan nan nan nan nan ...
    V        (time, lev, lat, lon) float64 nan nan nan nan nan nan nan nan ...

到目前为止,这么好。 (注意我已经删除了空间属性)。现在,让我们参考RH,相对湿度:

In [8]: data.RH
Out[8]: 
<xarray.DataArray 'RH' (time: 1, lev: 48, lat: 49, lon: 96)>
array([[[[             nan,              nan,              nan, ...,
                       nan,              nan,              nan],
         [             nan,              nan,              nan, ...,
                       nan,              nan,              nan],
         [             nan,              nan,              nan, ...,
                       nan,              nan,              nan],
         ..., 
         [  9.84245896e-01,   9.84482586e-01,   9.84114528e-01, ...,
            9.82491255e-01,   9.83228445e-01,   9.83820796e-01],
         [  9.84869719e-01,   9.86230493e-01,   9.87663150e-01, ...,
            9.81099427e-01,   9.82316971e-01,   9.83569324e-01],
         [  9.83583868e-01,   9.83583868e-01,   9.83583868e-01, ...,
            9.83583868e-01,   9.83583868e-01,   9.83583868e-01]],
<snip>
         [  8.91117509e-07,   8.92956564e-07,   8.92726121e-07, ...,
            8.90103763e-07,   8.89725982e-07,   8.90051581e-07],
         [  9.32031071e-07,   9.32695400e-07,   9.33462957e-07, ...,
            9.30619990e-07,   9.30997828e-07,   9.31466616e-07],
         [  9.39349945e-07,   9.39349945e-07,   9.39349945e-07, ...,
            9.39349945e-07,   9.39349945e-07,   9.39349945e-07]]]])
Coordinates:
  * lon      (lon) float64 -180.0 -176.2 -172.5 -168.8 -165.0 -161.2 -157.5 ...
  * lat      (lat) float64 -90.0 -86.25 -82.5 -78.75 -75.0 -71.25 -67.5 ...
  * lev      (lev) float64 1e+03 975.0 950.0 925.0 900.0 875.0 850.0 825.0 ...
  * time     (time) datetime64[ns] 2000-04-15
Attributes:
    long_name: relative_humidity_after_moist
    units: 1
    fmissing_value: 1e+15
    standard_name: relative_humidity_after_moist
    vmin: -1e+15
    vmax: 1e+15
    valid_range: [ -9.99999987e+14   9.99999987e+14]

大!现在,T,温度怎么样:

In [12]: data.T
Out[12]: 
<xarray.Dataset>
Dimensions:  (lat: 49, lev: 48, lon: 96, time: 1)
Coordinates:
  * lon      (lon) float64 -180.0 -176.2 -172.5 -168.8 -165.0 -161.2 -157.5 ...
  * lat      (lat) float64 -90.0 -86.25 -82.5 -78.75 -75.0 -71.25 -67.5 ...
  * lev      (lev) float64 1e+03 975.0 950.0 925.0 900.0 875.0 850.0 825.0 ...
  * time     (time) datetime64[ns] 2000-04-15
Data variables:
    H        (lon, lat, lev, time) float64 nan nan nan nan nan nan nan nan ...
    O3       (lon, lat, lev, time) float64 nan nan nan nan nan nan nan nan ...
    OMEGA    (lon, lat, lev, time) float64 nan nan nan nan nan nan nan nan ...
    PHIS     (lon, lat, time) float64 2.605e+04 1.887e+04 3.46e+03 207.6 0.0 ...
    PS       (lon, lat, time) float64 6.984e+04 7.764e+04 9.496e+04 ...
    QI       (lon, lat, lev, time) float64 nan nan nan nan nan nan nan nan ...
    QL       (lon, lat, lev, time) float64 nan nan nan nan nan nan nan nan ...
    QV       (lon, lat, lev, time) float64 nan nan nan nan nan nan nan nan ...
    RH       (lon, lat, lev, time) float64 nan nan nan nan nan nan nan nan ...
    SLP      (lon, lat, time) float64 9.973e+04 9.937e+04 9.905e+04 ...
    T        (lon, lat, lev, time) float64 nan nan nan nan nan nan nan nan ...
    U        (lon, lat, lev, time) float64 nan nan nan nan nan nan nan nan ...
    V        (lon, lat, lev, time) float64 nan nan nan nan nan nan nan nan ...
亲爱的,亲爱的。我认为它所做的是一个转置。究竟如何引用一个名为&#34; T&#34;的变量。在xarray数据集中?

2 个答案:

答案 0 :(得分:3)

Xarray支持变量的属性样式访问,作为交互式使用的便利功能。但是正如您所注意到的,这不能用于访问与内置Dataset方法同名的变量(在本例中为Dataset.T),这与{{3}相同})。

访问变量的可靠方法是使用字典式访问data['T']

data.get('T')也有效,因为Dataset支持Python的Mapping接口。与dict.get类似,如果找不到密钥,它会用于访问带有默认值的变量:data.get('not found')将返回None

答案 1 :(得分:0)

我想我明白了:

data.get("T")

现在可以专门使用它。