首页 > 解决方案 > 如何在 Dask Series.apply 中指定参数“元”?

问题描述

我有一个函数features_extract,它接受一个字符串r作为输入并返回一个 list [r, 3, 6]。我想将此功能应用于系列s。然后它返回一个错误AttributeError: 'DataFrame' object has no attribute 'name'

你能解释一下我哪里错了吗?

from dask.distributed import Client
import dask.dataframe as dd
import pandas as pd
import numpy as np
client = Client()

s = pd.Series(['a', 'b', 'c'])

def features_extract(r):
    return [r, 6, 7]

meta = [(0, 'f8'), (1, np.int64), (2, np.int64)]

s = dd.from_pandas(s, npartitions = 5)
s = s.apply(features_extract, meta = meta)
s.compute(scheduler = 'processes')

标签: pythonpandasdaskdask-distributeddask-dataframe

解决方案


meta选项中,您传递函数返回的对象的属性,但函数返回的项目features_extract是列表,而不是熊猫系列。有两种方法可以解决此问题:

  1. meta将选项更改为list(dask 将不关心列表中的 dtypes):
s = dd.from_pandas(s, npartitions = 5)
s = s.apply(features_extract, meta = list)
s.compute(scheduler = 'processes')
  1. 将函数输出更改为 pandas 系列,然后 dask 将使用您指定的 dtypes:
def features_extract(r):
    return pd.Series([r, 6, 7])

meta = [(0, 'f8'), (1, np.int64), (2, np.int64)]

s = dd.from_pandas(s, npartitions = 5)
s = s.apply(features_extract, meta = meta)
s.compute(scheduler = 'processes')

有关更多信息,请参阅文档


推荐阅读