有没有办法轻松地将数值的 DataFrame 转换为数组?类似于values
pandas DataFrame。我似乎无法使用提供的 API 找到任何方法来执行此操作,但我认为这是一种常见操作。
问问题
4347 次
3 回答
9
编辑:是的,现在这是微不足道的
您可以使用该.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)
于 2016-05-26T01:17:38.473 回答
2
我认为,可能还有另一种更短的方式。
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
谢谢
于 2018-02-21T11:55:14.217 回答
1
Dask 现在有一个DataFrame.to_dask_array()
功能可以做到这一点。
于 2021-11-17T11:37:57.650 回答