重塑 dask 数组(从 dask 数据框列获得)
Reshape a dask array (obtained from a dask dataframe column)
我是 dask 的新手,我正在尝试弄清楚如何重塑我从 dask 数据帧的单列中获得的 dask 数组,并且 运行 出现错误。想知道是否有人知道该修复程序(无需强制计算)?谢谢!
示例:
import pandas as pd
import numpy as np
from dask import dataframe as dd, array as da
df = pd.DataFrame({'x': [1, 2, 3], 'y': [4, 5, 6]})
ddf = dd.from_pandas(df, npartitions=2)
# This does not work - error ValueError: cannot convert float NaN to integer
ddf['x'].values.reshape([-1,1])
# this works, but requires a compute
ddf['x'].values.compute().reshape([-1,1])
# this works, if the dask array is created directly from a np array
ar = np.array([1, 2, 3])
dar = da.from_array(ar, chunks=2)
dar.reshape([-1,1])
不幸的是,数据帧及其片段的长度在 Dask 中通常是惰性的,并且仅在明确请求时才计算。这意味着数组不知道它的长度或分区,所以你不能重塑。下面笨拙的代码解决了这个问题,但我觉得应该有一个更简单的方法。
找到区块:
chunks = tuple(ddf['x'].map_partitions(len).compute())
size = sum(chunks)
使用现在已知的块和大小创建一个新数组对象:
a = ddf['x'].values
arr = da.Array(a.dask, a.name, chunks, a.dtype, (size,))
另外:
ddf['x'].to_dask_array(lengths=True).reshape([-1,1])
我是 dask 的新手,我正在尝试弄清楚如何重塑我从 dask 数据帧的单列中获得的 dask 数组,并且 运行 出现错误。想知道是否有人知道该修复程序(无需强制计算)?谢谢!
示例:
import pandas as pd
import numpy as np
from dask import dataframe as dd, array as da
df = pd.DataFrame({'x': [1, 2, 3], 'y': [4, 5, 6]})
ddf = dd.from_pandas(df, npartitions=2)
# This does not work - error ValueError: cannot convert float NaN to integer
ddf['x'].values.reshape([-1,1])
# this works, but requires a compute
ddf['x'].values.compute().reshape([-1,1])
# this works, if the dask array is created directly from a np array
ar = np.array([1, 2, 3])
dar = da.from_array(ar, chunks=2)
dar.reshape([-1,1])
不幸的是,数据帧及其片段的长度在 Dask 中通常是惰性的,并且仅在明确请求时才计算。这意味着数组不知道它的长度或分区,所以你不能重塑。下面笨拙的代码解决了这个问题,但我觉得应该有一个更简单的方法。
找到区块:
chunks = tuple(ddf['x'].map_partitions(len).compute())
size = sum(chunks)
使用现在已知的块和大小创建一个新数组对象:
a = ddf['x'].values
arr = da.Array(a.dask, a.name, chunks, a.dtype, (size,))
另外:
ddf['x'].to_dask_array(lengths=True).reshape([-1,1])