繁体   English   中英

xarray.dataset:重新洗牌变量(不是坐标),以便它们以一定的顺序出现在 print 或 ncdump

[英]xarray.dataset: re-shuffle variables (not coordinates) so that they appear in certain order with print or ncdump

我想知道是否存在重新洗牌 xarray.dataset 中的变量的可能性......

我有一个数据集,我一直在按照某个进程给出的某个顺序附加变量...然后,当我在 Python 控制台中打印数据集时(或执行ncdump -h output.nc时,我得到了相同的顺序,但我希望以另一种顺序获取变量。

我得到什么:

<xarray.Dataset>
Dimensions:                                                  (stations: 6,
                                                              Rrs_bands: 110,
                                                              Rrs_S3A_OLCI_bands: 21)
Coordinates:
  * stations                                                 (stations) <U16 ...
  * Rrs_bands                                                (Rrs_bands) float64 ...
  * Rrs_S3A_OLCI_bands                                       (Rrs_S3A_OLCI_bands) float64 ...
Data variables: (12/69)
    Rrs                                                      (stations, Rrs_bands) float64 ...
    acquisition_time                                         (stations) object ...
    lon                                                      (stations) float64 ...
    lat                                                      (stations) float64 ...
    depth                                                    (stations) float64 ...
    Rrs_qa                                                   (stations) float64 ...
    ...                                                       ...
    total_column_formaldehyde                                (stations) float64 ...
    total_column_hydrogen_peroxide                           (stations) float64 ...
    total_column_hydroxyl_radical                            (stations) float64 ...
    total_column_nitric_acid                                 (stations) float64 ...
    total_column_peroxyacetyl_nitrate                        (stations) float64 ...
    Rrs_S3A_OLCI                                             (stations, Rrs_S3A_OLCI_bands) float64 ...
Attributes:
    description:    In situ database file (IDB) for insitu set Geneva (in sit...

我想要的是:

<xarray.Dataset>
Dimensions:                                                  (stations: 6,
                                                              Rrs_bands: 110,
                                                              Rrs_S3A_OLCI_bands: 21)
Coordinates:
  * stations                                                 (stations) <U16 ...
  * Rrs_bands                                                (Rrs_bands) float64 ...
  * Rrs_S3A_OLCI_bands                                       (Rrs_S3A_OLCI_bands) float64 ...
Data variables: (12/69)
    acquisition_time                                         (stations) object ...
    lon                                                      (stations) float64 ...
    lat                                                      (stations) float64 ...
    depth                                                    (stations) float64 ...
    ...                                                       ...
    total_column_formaldehyde                                (stations) float64 ...
    total_column_hydrogen_peroxide                           (stations) float64 ...
    total_column_hydroxyl_radical                            (stations) float64 ...
    total_column_nitric_acid                                 (stations) float64 ...
    total_column_peroxyacetyl_nitrate                        (stations) float64 ...
    Rrs                                                      (stations, Rrs_bands) float64 ...
    Rrs_qa                                                   (stations) float64 ...
    Rrs_S3A_OLCI                                             (stations, Rrs_S3A_OLCI_bands) float64 ...
Attributes:
    description:    In situ database file (IDB) for insitu set Geneva (in sit...

在打印或执行 ncdump 时,是否有一种简单的方法可以重新组织此列表?

谢谢:)

是的!

ds = ds[list_of_variables_in_desired_order]

数据集建立在数据变量的(有序)字典之上。 如果您创建一个新的数据集 object 并使用所需顺序的键,结果将是一个副本,其中保留了您传递变量的顺序。

要同时指定坐标和变量的顺序,还要传递坐标:

ds = ds[
    list_of_coordinates_in_desired_order
    + list_of_variables_in_desired_order
]

所以在你的情况下:

ds = ds[[
    "stations",
    "Rrs_bands",
    "Rrs_S3A_OLCI_bands",
    "acquisition_time",
    "lon",
    "lat",
    "depth",
    ..., # complete the list of other variables
    "total_column_formaldehyde",
    "total_column_hydrogen_peroxide",
    "total_column_hydroxyl_radical",
    "total_column_nitric_acid",
    "total_column_peroxyacetyl_nitrate",
    "Rrs",
    "Rrs_qa",
    "Rrs_S3A_OLCI",
]]

有关xr.Dataset.__getitem__的信息,请参阅 API 文档:

Dataset.__getitem__(key)DataArray或变量子集或索引数据集的形式访问此数据集的变量或坐标。

使用名称列表进行索引将返回一个新的Dataset object。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM