我正在尝试使用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))