有没有办法轻松将数值的DataFrame转换为数组?与带有pandas DataFrame的values
类似。我似乎无法使用提供的API找到任何方法,但我认为这是一个常见的操作。
答案 0 :(得分:8)
您可以使用.values
属性
x = df.values
目前没有简单的方法可以做到这一点。这是因为dask.array需要知道其所有块的长度,而dask.dataframe不知道这个长度。这不是一个完全懒惰的操作。
话虽如此,您可以使用dask.delayed完成此操作,如下所示:
import dask.array as da
from dask import compute
def to_dask_array(df):
partitions = df.to_delayed()
shapes = [part.values.shape for part in partitions]
dtype = partitions[0].dtype
results = compute(dtype, *shapes) # trigger computation to find shape
dtype, shapes = results[0], results[1:]
chunks = [da.from_delayed(part.values, shape, dtype)
for part, shape in zip(partitions, shapes)]
return da.concatenate(chunks, axis=0)
答案 1 :(得分:1)
我认为,可能会有另一种方式缩短。
import dask.array as da
import dask.dataframe as df
ruta ='...'
df = dd.read_csv(...)
x = df_reg['column you want to transform in array']
def transf(x):
xd=x.to_delayed()
full = [da.from_delayed(i, i.compute().shape, i.compute().dtype) for i in xd]
return da.concatenate(full)
x_array=transf(x)
另外,如果你想用N列转换DaskDataframe,那么每个数组元素将是另一个这样的数组:
阵列((X,X2,X3),(Y1,Y2,Y3),....)
您必须更改顺序:
从:
i.compute().dtype
到
i.compute().dtypes
由于