如何在 Dask Series.apply 中指定参数 "meta"?
How to specify parameter "meta" in Dask Series.apply?
我有一个函数 features_extract
,它将一个字符串 r
作为输入,returns 一个列表 [r, 3, 6]
。我想将此功能应用于系列 s
。然后它 returns 一个错误 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
返回的项目是列表,而不是 pandas 系列.有两种方法可以解决此问题:
- 将
meta
选项更改为 list
(dask 不会关心列表中的数据类型):
s = dd.from_pandas(s, npartitions = 5)
s = s.apply(features_extract, meta = list)
s.compute(scheduler = 'processes')
- 将函数输出更改为 pandas 系列,然后 dask 将使用您指定的数据类型:
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')
有关详细信息,请参阅 docs。
我有一个函数 features_extract
,它将一个字符串 r
作为输入,returns 一个列表 [r, 3, 6]
。我想将此功能应用于系列 s
。然后它 returns 一个错误 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
返回的项目是列表,而不是 pandas 系列.有两种方法可以解决此问题:
- 将
meta
选项更改为list
(dask 不会关心列表中的数据类型):
s = dd.from_pandas(s, npartitions = 5)
s = s.apply(features_extract, meta = list)
s.compute(scheduler = 'processes')
- 将函数输出更改为 pandas 系列,然后 dask 将使用您指定的数据类型:
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')
有关详细信息,请参阅 docs。