python - 如何在 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')
解决方案
在meta
选项中,您传递函数返回的对象的属性,但函数返回的项目features_extract
是列表,而不是熊猫系列。有两种方法可以解决此问题:
meta
将选项更改为list
(dask 将不关心列表中的 dtypes):
s = dd.from_pandas(s, npartitions = 5)
s = s.apply(features_extract, meta = list)
s.compute(scheduler = 'processes')
- 将函数输出更改为 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')
有关更多信息,请参阅文档。
推荐阅读
- wpf - WPF:最小化 System.Windows.Window 的状态
- powershell - 在 powershell Invoke-Expression 中使用 cmd 管道
- android - 改造冻结用户界面
- neo4j - 如何在 Neo4j 中找到图形的连通性?
- haskell - 我在哪里可以捕获异常?
- java - Mulesoft 转换消息转义正斜杠
- spring - 重启应用程序后Spring kafka重置聚合
- sql - 使用 Join SQL 删除 Varchar 中的最后一个数字
- python - 复杂的乐透号码生成器 - Python
- format - 将标量从 sif 转换为 hrf