Вы можете использовать метод .map. , точь-в-точь как в пандах
In [1]: import dask.dataframe as dd
In [2]: import pandas as pd
In [3]: df = pd.DataFrame({'x': [1, 2, 3]})
In [4]: ddf = dd.from_pandas(df, npartitions=2)
In [5]: df.x.map(lambda x: x + 1)
Out[5]:
0 2
1 3
2 4
Name: x, dtype: int64
In [6]: ddf.x.map(lambda x: x + 1).compute()
Out[6]:
0 2
1 3
2 4
Name: x, dtype: int64
Метаданные
Вас могут попросить указать ключевое слово meta=
. Это позволяет dask.dataframe узнать имя вывода и тип вашей функции. Копируем строку документации из map_partitions
сюда:
meta : pd.DataFrame, pd.Series, dict, iterable, tuple, optional
An empty pd.DataFrame or pd.Series that matches the dtypes and
column names of the output. This metadata is necessary for many
algorithms in dask dataframe to work. For ease of use, some
alternative inputs are also available. Instead of a DataFrame,
a dict of {name: dtype} or iterable of (name, dtype) can be
provided. Instead of a series, a tuple of (name, dtype) can be
used. If not provided, dask will try to infer the metadata.
This may lead to unexpected results, so providing meta is
recommended.
For more information, see dask.dataframe.utils.make_meta.
Итак, в приведенном выше примере, где моим выводом будет серия с именем 'x'
и dtype int
, я могу сделать одно из следующих, чтобы быть более явным.
>>> ddf.x.map(lambda x: x + 1, meta=('x', int))
or
>>> ddf.x.map(lambda x: x + 1, meta=pd.Series([], dtype=int, name='x'))
Это сообщает dask.dataframe, чего ожидать от нашей функции. Если метаданные не указаны, dask.dataframe попытается запустить вашу функцию на небольшом фрагменте данных. Это вызовет ошибку с просьбой о помощи, если это не удастся.
person
MRocklin
schedule
13.10.2016
Dask
текущая версия 1.2 уже может принимать приведенный выше синтаксис: df['new_col']=df['col2].map_parttion(some_func) - person skibee   schedule 12.05.2019