Python 方法的作用是:强制将DataArray的数据类型更改为float 问题描述

Python 方法的作用是:强制将DataArray的数据类型更改为float 问题描述,python,python-xarray,Python,Python Xarray,我有一个包含ints的数据集,我想根据一些条件选择一个子数据集,但我想保留整数数据类型。在我看来,Xarray force将整数数据更改为float数据类型 示例设置 代码 输出 尺寸:(尺寸0:13) 协调: *尺寸0(尺寸0)int64 01 2 3 4 5 6 7 8 9 10 11 12 数据变量: 数字(dim_0)int64 93 99 49 35 92 14 41 57 28 59 74 1 15 name(dim_0)这是因为使用numpy(xarray在引擎盖下使用)ints

我有一个包含
int
s的数据集,我想根据一些条件选择一个子数据集,但我想保留整数数据类型。在我看来,Xarray force将整数数据更改为float数据类型

示例设置 代码 输出

尺寸:(尺寸0:13)
协调:
*尺寸0(尺寸0)int64 01 2 3 4 5 6 7 8 9 10 11 12
数据变量:
数字(dim_0)int64 93 99 49 35 92 14 41 57 28 59 74 1 15
name(dim_0)这是因为使用numpy(xarray在引擎盖下使用)ints没有表示
NaN
s的方法。因此,对于大多数
,其中的
结果,需要强制该类型浮动


如果
drop=True
并且每个被屏蔽的值都被删除,这实际上不是一个约束-您可以让新数组保留其数据类型,因为不需要
NaN
值。这在xarray中目前还没有,但可能是一个附加功能。

根据,
xarray.Dataset.where()
返回“与调用方相同的类型”,因此不应该发生这种情况。是的,我对NaN也有同样的猜测。是同意关于
drop=True
。我可以在Github上打开一个问题吗?如果可以的话,我会尽量抽出时间提交请求。是的,这是个好主意。FWIW您可以使用
astype
强制返回ints。虽然强制返回ints本身的问题是我必须迭代所有转换为float的
DataArray
s,但这并不像保留它那样好。抛开繁琐的代码不谈,当已有
DataArray
s应该是
dtype
float
时,会出现其他复杂情况。如果希望它们都是
int
,则不需要迭代:
xr.Dataset({'a':xr.DataArray(np.random.rand(10,3)),'b':xr.DataArray(np.random.rand(10)).astype('int'))
有效。
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)
subdataset = dataset.where(dataset.num < 50, drop=True)
print(subdataset)