Python 如何将dask系列保存到hdf5

Python 如何将dask系列保存到hdf5,python,hdf5,dask,Python,Hdf5,Dask,这是我第一次尝试的 df = dd.from_pandas(pd.DataFrame(dict(x=np.random.normal(size=100), y = np.random.normal(size=100))), chunksize=40) cat = df.map_partitions( lambda d: np.digitize(d['x']+d['y'], [.3,.9]), meta=pd.Series([], dtype=int, name='x')) cat.to_hd

这是我第一次尝试的

df = dd.from_pandas(pd.DataFrame(dict(x=np.random.normal(size=100), 
y = np.random.normal(size=100))), chunksize=40)

cat = df.map_partitions( lambda d: np.digitize(d['x']+d['y'], [.3,.9]), meta=pd.Series([], dtype=int, name='x'))
cat.to_hdf('/tmp/cat.h5', '/cat')
此操作失败,无法正确创建存储程序

接下来,我尝试保存cat.values:

da.to_hdf5('/tmp/cat.h5', '/cat', cat.values)
这会失败,因为无法将浮点NaN转换为整数,我猜这是因为cat.values没有NaN shape和chunksize值

我如何让这两个都起作用?注意,实际数据无法放入内存。

这可以正常工作:

import numpy as np
import pandas as pd
import dask.dataframe as dd

df = pd.DataFrame(dict(x=np.random.normal(size=100),
                       y=np.random.normal(size=100)))
ddf = dd.from_pandas(df, chunksize=40)

cat = ddf.map_partitions(lambda d: pd.Series(np.digitize(d['x'] + d['y'], [.3,.9])),
                         meta=('x', int))
cat.to_hdf('cat.h5', '/cat')
在调用np.digitize时,您丢失了pd.Series包装器,这意味着map_分区的输出是一个numpy数组,而不是一个pandas系列,这是一个错误。在将来调试时,尝试从一路上的步骤中计算一点数据以查看错误所在可能会很有用。例如,我通过运行.head-on-cat发现了这个问题