J'ai un objet dask dataframe mais j'aimerais avoir un tableau dask. Comment puis-je réaliser cela ?
Réponse
Trop de publicités?
MRocklin
Points
2855
Il y a trois façons de procéder.
- Utilisez le bien nommé .to_dask_array() méthode
- Utilisez le
.values
ou l'attributto_records()
comme avec Pandas - Utilisez
map_partitions
pour appeler toute fonction qui convertit un dataframe pandas en un tableau numpy sur toutes les partitions
Voici un exemple qui fait les trois.
>>> 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
Notez que parce que les dataframes Dask ne maintiennent pas le nombre de lignes dans chaque chunk, les tableaux résultants n'auront pas non plus cette information. (notez le NaN
dans la forme et la taille des morceaux.