通过dask数据框map_partitions实现sklearn的MultilabelBinarizer的影响

时间:2019-04-03 05:48:34

标签: python scikit-learn dask

我正在尝试使用sklearn的MultilabelBinarizer预处理功能获取一个1列df,其中每个单元格都是一个列表并返回分类编码

例如

[1,2]
[1]
[3,2]
[1]

成为一个数据框,例如:

1 1 0
1 0 0
0 1 1   
1 0 0

它适用于普通的pandas数据框,但使用 dask 数据框时会失败,并显示NotImplementedError。

有谁知道一种替代方法,可以通过分布式数据帧计算这种编码?

这是工作代码:

from sklearn.preprocessing import MultiLabelBinarizer
def binarize_data(df):

    # Binarize connectors
    mlb=MultiLabelBinarizer()
    tmp = df.iloc[:, 0]

    res=mlb.fit_transform(tmp)
    binarized_data = pd.DataFrame(res,
                                 columns=[tmp.name+"_" +
                                          c for c in mlb.classes_],
                                 index=tmp.index, dtype='int')

    return binarized_data
binarize_data(pd.DataFrame(dict(foo=pd.Series([["1","2"], ["1"], ["3", "2"], ["1"]]))))

这是失败的dask代码:

from sklearn.preprocessing import MultiLabelBinarizer
def binarize_data(df):

    # Binarize connectors
    mlb=MultiLabelBinarizer()
    tmp = df.iloc[:, 0]

    res=mlb.fit_transform(tmp)
    binarized_data = pd.DataFrame(res,
                                 columns=[tmp.name+"_" +
                                          c for c in mlb.classes_],
                                 index=tmp.index, dtype='int')

    return binarized_data
binarize_data(dd.from_pandas(pd.DataFrame(dict(foo=pd.Series([["1","2"], ["1"], ["3", "2"], ["1"]]))), npartitions=10))

0 个答案:

没有答案