我有pd.Series
作为pd.MultiIndex
的数据:
我想将这些数据转换为xr.DataArray
。
以下是一些示例代码,该代码生成了一个{377}(其中可能包含73,984,365个元素)的377个元素,仅占0.00051%。
pd.Series
不可能先from itertools import zip_longest
import numpy as np
import pandas as pd
# Dimensions and their lengths
dims = 'abcdef'
sizes = [1, 5, 21, 21, 89, 377]
# Names like f_000 … f_376 along each dimension
coords = []
for d, N in zip(dims, sizes):
coords.append([f'{d}_{i:03d}' for i in range(N)])
def make_values():
"""Make a DataFrame containing each label in *coords* at least once."""
values = list(zip_longest(*coords, np.random.rand(max(sizes))))
result = pd.DataFrame(values, columns=list(dims) + ['value']) \
.ffill() \
.set_index(list(dims))
return result
data = make_values()
,然后再xr.DataArray.from_series(data)
,因为创建步骤(内部使用.chunk(…)
)会创建完整的笛卡尔积,并产生xr.Dataset.from_dataframe()
我尝试过:
MemoryError
预分配内存-但这会生成一个只读对象,而我无法从xr.DataArray(dask.array.full(fill_value=None, shape=sizes), …)
为其分配值。写入文件,有点像:
data
...但这会引发异常。
除了以import xarray as xr
store = pd.HDFStore('temp.h5')
store.put('foo', data)
xr.open_dataset('temp.h5', chunks={}) # or with engine='h5netcdf'
可以识别的一种格式手动创建文件之外,有什么方法可以做到?