Массив Dask из фрейма данных
есть ли способ легко преобразовать фрейм данных числовых значений в массив? Похожие на values
с фреймом данных pandas. Я не могу найти способ сделать это с помощью предоставленного API, но я бы предположил, что это обычная операция.
2 ответов
Edit: да, теперь это тривиально
можно использовать .values
свойства
x = df.values
старше, теперь неправильный ответ
на данный момент нет тривиального способа сделать это. Это потому, что ДАСК.array должен знать длину всех своих кусков и dask.dataframe не знает этой длины. Это не может быть полностью ленивой операцией.
Это, как говорится, вы можете сделать это с помощью ДАСК.задержано as следует:
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)
кроме того, если вы хотите преобразовать DaskDataframe с N столбцами, и, следовательно, каждый элемент массива будет другим массивом, как это:
массив((x,x2,x3),(y1,y2,y3),....)
вы должны изменить порядок:
from:
i.compute().dtype
to
i.compute().dtypes
спасибо