Xarray - DataArray作为数据集打开

时间:2017-01-26 17:20:24

标签: python netcdf python-xarray

我使用open_dataset打开MITgcm生成的netcdf输出。但是,DataSet中的一个坐标变量将作为整个DataSet而不是DataArray返回。

这个过程似乎正常工作:

import xarray as xr
ds = xr.open_dataset('state.0000000000.nc')
<xarray.Dataset>
Dimensions:      (T: 8, X: 16, Xp1: 17, Y: 16, Yp1: 17, Zld000100: 100, Zmd000100: 100)

Coordinates:
  * T            (T) float64 1.296e+05 3.888e+05 6.48e+05 
  * X            (X) float64 500.0 1.5e+03 2.5e+03 
  * Y            (Y) float64 4.85e+04 4.95e+04 
  * Xp1          (Xp1) float64 0.0 1e+03 2e+03 
  * Yp1          (Yp1) float64 4.8e+04 4.9e+04 
  * Zmd000100    (Zmd000100) int64 0 1 2
  * Zld000100    (Zld000100) int64 0 1 2 
Data variables:
    iter         (T) int32 1296 3888 
    diag_levels  (Zmd000100) float64 1.0

(我已经省略了输出的一些细节)。 但是,当我检查T坐标的类型时,它将作为DataSet返回

type(ds.T)
# xarray.core.dataset.Dataset

当我检查任何其他坐标/变量的类型时,它们会以

的形式返回
xarray.core.dataarray.DataArray

ds.T坐标似乎与ds相同。例如,如果我向ds添加变量,它也会添加到ds.T.它似乎也是无限递归的,例如ds.T.T.T就是同一个对象。

在底层的netcdf文件中,T维度和其他维度之间的唯一区别是T具有无限维度。

T = UNLIMITED ; // (4 currently)

但是,我创建了一个虚拟的netcdf文件,该文件具有无限的维度,并且问题没有再发生。

我已尝试使用decode_times,decode_cf和decision_coords = False,没有任何区别。

我正在使用xarray版本0.8.2,运行python 2.7.12。

1 个答案:

答案 0 :(得分:2)

您需要像T一样访问变量ds['T']ds.T进行转置。也可以看看: How to read a variable called "T" with xarray?