首页 > 解决方案 > Dask:将自定义函数应用于 DataFrame 会出错

问题描述

我想加快我的 DataFrame 操作,并决定为此目的使用 dask 库 - 但不能成功使用它。我做了一个测试示例来显示我的问题:

import numpy as np
import pandas as pd
import dask.dataframe as dd
from dask.multiprocessing import get

def testfunc(good):
  return good*good

df = pd.DataFrame({'a' : [1,2,3], 'b' : [4,5,6], 'c' : [7,8,9]})
ddata = dd.from_pandas(df, npartitions=2)

df1 = ddata.map_partitions(lambda df: df.apply((lambda row: testfunc(*row)), axis=1)).compute(get=get)

但是运行此代码我收到一个错误: TypeError: testfunc() 需要 1 个位置参数,但给出了 3 个。你能解释一下我的代码有什么问题吗...

标签: pythonpandasdask

解决方案


这将与一个小的变化一起工作。您当前正在row使用星号解包对象。您可能想直接传递该行,原样。

import numpy as np
import pandas as pd
import dask.dataframe as dd
​
def testfunc(good):
    return good*good
​
df = pd.DataFrame({'a' : [1,2,3], 'b' : [4,5,6], 'c' : [7,8,9]})
ddata = dd.from_pandas(df, npartitions=2)
​
df1 = ddata.map_partitions(lambda df: df.apply((lambda row: testfunc(row)), axis=1)).compute()
print(df1)
   a   b   c
0  1  16  49
1  4  25  64
2  9  36  81

有关更多信息,您可能需要查看表达式Python 文档


推荐阅读