xarray.Dataset.where()方法强制将DataArrays的dtype更改为float

时间:2016-09-12 15:48:51

标签: python python-xarray

问题描述

我有一个带有int s的数据集,我想按一些标准选择一个子数据集,但我想保留整数数据类型。在我看来,Xarray强制 - 将整数数据更改为float数据类型。

示例设置

代码

import numpy
import xarray

nums = numpy.random.randint(0, 100, 13)
names = numpy.random.choice(["babadook", "samara", "jason"], 13)
data_vars = {"num": xarray.DataArray(nums), "name": xarray.DataArray(names)}
dataset = xarray.Dataset(data_vars)
print(dataset)

输出

<xarray.Dataset>
Dimensions:  (dim_0: 13)
Coordinates:
  * dim_0    (dim_0) int64 0 1 2 3 4 5 6 7 8 9 10 11 12
Data variables:
    num      (dim_0) int64 93 99 49 35 92 14 41 57 28 59 74 1 15
    name     (dim_0) <U8 'babadook' 'samara' 'samara' 'samara' 'jason' ...
In [16]:

示例问题

代码

subdataset = dataset.where(dataset.num < 50, drop=True)
print(subdataset)

输出

<xarray.Dataset>
Dimensions:  (dim_0: 7)
Coordinates:
  * dim_0    (dim_0) int64 2 3 5 6 8 11 12
Data variables:
    num      (dim_0) float64 49.0 35.0 14.0 41.0 28.0 1.0 15.0
    name     (dim_0) <U32 'samara' 'samara' 'jason' 'babadook' 'jason' ...

1 个答案:

答案 0 :(得分:3)

那是因为numpy(xarray使用引擎盖下)int没有办法表示NaN。因此,对于大多数where结果,需要将类型强制转换为浮点数。

如果drop=True和被屏蔽的每个值都被删除,那实际上不是约束 - 您可以让新数组保留其dtype,因为不需要NaN值。目前不在xarray中,但可能是一个额外的功能。