来自 DataFrame 的 Dask 数组
Dask Array from DataFrame
有没有一种方法可以轻松地将数值的DataFrame转换为数组?类似于 values
和 pandas DataFrame。我似乎找不到使用提供的 API 执行此操作的任何方法,但我认为这是一个常见的操作。
编辑:是的,现在这是微不足道的
您可以使用 .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)
我想,可能还有更短的方法。
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
谢谢
Dask 现在有一个 DataFrame.to_dask_array()
函数来执行此操作。
有没有一种方法可以轻松地将数值的DataFrame转换为数组?类似于 values
和 pandas DataFrame。我似乎找不到使用提供的 API 执行此操作的任何方法,但我认为这是一个常见的操作。
编辑:是的,现在这是微不足道的
您可以使用 .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)
我想,可能还有更短的方法。
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
谢谢
Dask 现在有一个 DataFrame.to_dask_array()
函数来执行此操作。