我有一个dask数据框对象,但想拥有一个dask数组。我该如何完成?
最佳答案
有三种方法可以做到这一点。
使用适当命名的.to_dask_array()方法
与熊猫一样使用.values
属性或to_records()
方法
使用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
请注意,由于Dask数据帧不维护每个块中的行数,因此生成的数组也将不具有此信息。 (请注意形状和块大小中的
NaN
值。关于python - 如何将Dask数据框转换为Dask数组?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52119342/