我对dask_ml.preprocessing.OrdinalEncoder.transform的结果感到困惑:
from sklearn.preprocessing import OrdinalEncoder
from dask_ml.preprocessing import OrdinalEncoder as DaskOrdinalEncoder
import numpy as np
import pandas as pd
N = 10
np.random.seed(1234)
df = pd.DataFrame({
"cat1": np.random.choice(list(string.ascii_uppercase)[0:3], size=N),
"cat2": np.random.choice(list(string.ascii_uppercase)[0:3], size=N),
})
df_dd = dd.from_pandas(df, npartitions=3)
原始 OrdinalEncoder.transform 返回一个 numpy.ndarray (带有数值):
>>> OrdinalEncoder().fit_transform(df)
array([[2., 2.],
[1., 0.],
[0., 0.],
[0., 2.],
[0., 2.],
[1., 2.],
[1., 0.],
[1., 0.],
[2., 0.],
[2., 1.]])
dask-ml 对应项不仅通过返回 pandas.DataFrame 来破坏接口,它还简单地返回初始输入 DataFrame:
>>> DaskOrdinalEncoder().fit_transform(df_dd).compute().equals(df)
True
我期望的是一个(Pandas 或 Dask)DataFrame 或一个(Numpy 或 Dask)数组,其中包含类似于 sklearn OrdinalEncoder 产生的数值。