如何将 dask 系列保存到 hdf5

How to save a dask series to hdf5

这是我首先尝试的

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')

失败 cannot properly create the storer...

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

da.to_hdf5('/tmp/cat.h5', '/cat', cat.values)

这失败了 cannot convert float NaN to integer,我猜这是由于 cat.values 没有 nan 形状和块大小值。

如何让这两个都起作用?请注意,实际数据不适合内存。

这很好用:

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')

您缺少 pd.Series 调用 np.digitize 的包装器,这意味着 map_partitions 的输出是一个 numpy 数组而不是 pandas 系列(一个错误)。将来在调试时,尝试计算一些步骤中的数据以查看错误位置可能很有用(例如,我通过 运行 .head() 在 [=15 上发现了这个问题=]).