如何将 Dask Dataframe 转换为 Dask Array?

MRo*_*lin 6 python numpy pandas dask

我有一个 dask 数据框对象,但想要一个 dask 数组。我该如何实现这个目标?

MRo*_*lin 7

有三种方法可以做到这一点。

  1. 使用恰当命名的.to_dask_array()方法
  2. 使用.values属性或to_records()方法,就像 Pandas 一样
  3. 用于map_partitions调用将 pandas 数据帧转换为所有分区上的 numpy 数组的任何函数

这是一个执行这三个操作的示例。

>>> import dask

>>> df = dask.datasets.timeseries()

>>> df
Dask DataFrame Structure:
                   id    name        x        y
npartitions=30                                 
2000-01-01      int64  object  float64  float64
2000-01-02        ...     ...      ...      ...
...               ...     ...      ...      ...
2000-01-30        ...     ...      ...      ...
2000-01-31        ...     ...      ...      ...
Dask Name: make-timeseries, 30 tasks

>>> import numpy as np

>>> df.map_partitions(np.asarray)
dask.array<asarray, shape=(nan, 4), dtype=object, chunksize=(nan, 4)>

>>> df.to_dask_array()
dask.array<array, shape=(nan, 4), dtype=object, chunksize=(nan, 4)>

>>> df.values
dask.array<values, shape=(nan, 4), dtype=object, chunksize=(nan, 4)>

>>> df.to_records()  # note that this returns a record array
dask.array<to_records, shape=(nan,), dtype=(numpy.record, [('timestamp', 'O'), ('id', '<i8'), ('name', 'O'), ('x', '<f8'), ('y', '<f8')]), chunksize=(nan,)

>>> dask.__version__
0.19.0
Run Code Online (Sandbox Code Playgroud)

请注意,由于 Dask 数据帧不维护每个块中的行数,因此生成的数组也不会包含此信息。(注意NaN形状和块大小中的值。