Достигните эффекта MultilabelBinarizer от sklearn с помощью dask dataframe map_partitions - PullRequest
1 голос
/ 03 апреля 2019

Я пытаюсь использовать функцию предварительной обработки sklaarn 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"]]))))

и вот код ошибки:

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))
...