如何将 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 上发现了这个问题=]).
这是我首先尝试的
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 上发现了这个问题=]).