Dask Groupby-Apply meta失败

时间:2017-04-07 21:29:17

标签: python dask

我有一个在不使用meta参数的情况下为我工作的groupby。它输出我想要的但我想添加列名并获取数据帧而不是系列作为输出。

我试图运行以下代码:

jmin = client.persist(j1.loc[:10000])

import pandas as pd
import numpy as np

def unique(d):
    return len(d.loc[:,['id']].drop_duplicates())

meta=pd.DataFrame(columns=['ids_per_mac'])
meta.ids_per_mac.astype(np.int64)

uu = client.persist(jmin.groupby(jmin['mac_address']).apply(unique,meta=meta))

执行失败:

enter image description here

任何想法为什么这个groupby适用不起作用vs没有meta的版本?

uu = client.persist(jmin.groupby(jmin['mac_address']).apply(unique))

1 个答案:

答案 0 :(得分:4)

添加meta=告诉dask.dataframe它应该从你的函数中得到什么。这是一种对dask.dataframe保持礼貌的方式,以便它可以继续懒惰地运行,而无需调用代码来确定函数返回的内容。

不幸的是,它不是一种自动转换数据的方法。您仍然必须依赖普通的Pandas API。

您可以考虑使用.to_frame()方法将系列转换为数据框。

您可能也知道,但调用groupby.apply比使用groupby.nuniquegroupby.aggregate等内置缩减要慢得多。