9

有没有办法轻松地将数值的 DataFrame 转换为数组?类似于valuespandas DataFrame。我似乎无法使用提供的 API 找到任何方法来执行此操作,但我认为这是一种常见操作。

4

3 回答 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()功能可以做到这一点。

文档:https ://docs.dask.org/en/stable/generated/dask.dataframe.DataFrame.to_dask_array.html#dask.dataframe.DataFrame.to_dask_array

于 2021-11-17T11:37:57.650 回答