假设我创建了一个带有整数变量的数据集。
import xarray as xr
import numpy as np
int_var = np.random.randint(0, 10, 10)
ds = xr.Dataset(data_vars={"int_var": (("x"), int_var)},
coords={"x": range(10)})
然后我保存它,提供一个编码和一个整数填充值:
from numcodecs import Blosc
compressor = Blosc(cname = 'lz4')
encoding = {v: {'compressor': compressor, 'dtype': ds[v].dtype, "_FillValue": -9999}
for v in ds.data_vars}
ds.to_zarr(store="example.zarr", mode='w', consolidated=True, encoding=encoding)
然后当我读取数据时,类型已从 int32 更改为 float64。但是,该类型仍设置为<i8
.zmetadata 文件中的类型,并且我看到该_FillValue
类型已正确加载为 int。
# Loads int_var with dtype float64
reloaded = xr.open_zarr("example.zarr", consolidated=True)
我需要它是整数类型,因为我正在存储索引并且我的工作是使数据易于使用——用户每次需要时都必须更改每个整数列的 dtype 是不可接受的。
我注意到,如果我只是_FillValue
从编码字典中删除,则类型会保持不变。发生了什么事,我该如何解决?