dask_expr._collection.DataFrame.apply

dask_expr._collection.DataFrame.apply

DataFrame.apply(function, *args, meta=_NoDefault.no_default, axis=0, **kwargs)[源代码]

pandas.DataFrame.apply 的并行版本

这模仿了 pandas 版本,除了以下几点:

  1. 仅支持 axis=1 (并且必须明确指定)。

  2. 用户应通过 meta 关键字提供输出元数据。

参数
函数函数

应用于每一列/行的函数

{0 或 ‘index’, 1 或 ‘columns’}, 默认 0
  • 0 或 ‘index’: 对每一列应用函数(不支持)

  • 1 或 ‘columns’: 对每一行应用函数

metapd.DataFrame, pd.Series, dict, iterable, tuple, optional

一个空的 pd.DataFramepd.Series,其数据类型和列名与输出匹配。此元数据对于 dask dataframe 中的许多算法正常工作是必要的。为了便于使用,还提供了一些替代输入。除了 DataFrame 之外,还可以提供 {name: dtype} 的字典或 (name, dtype) 的可迭代对象(注意名称的顺序应与列的顺序匹配)。除了系列之外,还可以使用 (name, dtype) 的元组。如果未提供,dask 将尝试推断元数据。这可能会导致意外结果,因此建议提供 meta。有关更多信息,请参阅 dask.dataframe.utils.make_meta

参数元组

传递给函数的定位参数,除了数组/系列之外

额外的关键字参数将被作为关键字传递给函数
返回
应用Series 或 DataFrame

示例

>>> import pandas as pd
>>> import dask.dataframe as dd
>>> df = pd.DataFrame({'x': [1, 2, 3, 4, 5],
...                    'y': [1., 2., 3., 4., 5.]})
>>> ddf = dd.from_pandas(df, npartitions=2)

对每一行应用一个函数,在 argskwargs 中传入额外参数:

>>> def myadd(row, a, b=1):
...     return row.sum() + a + b
>>> res = ddf.apply(myadd, axis=1, args=(2,), b=1.5)  

默认情况下,dask 会尝试通过在某些假数据上运行您提供的函数来推断输出元数据。这在许多情况下效果很好,但有时可能会很昂贵,甚至失败。为了避免这种情况,您可以使用 meta 关键字手动指定输出元数据。这可以通过多种形式指定,更多信息请参见 dask.dataframe.utils.make_meta

这里我们指定输出是一个名为 'x' 的 Series,并且 dtype 为 float64

>>> res = ddf.apply(myadd, axis=1, args=(2,), b=1.5, meta=('x', 'f8'))

在元数据不变的情况下,您也可以直接传入对象本身:

>>> res = ddf.apply(lambda row: row + 1, axis=1, meta=ddf)