【发布时间】:2019-01-22 13:48:42
【问题描述】:
我尝试将 dask DummyEncoder 用于 OneHotEncoding 我的数据。但结果并不如预期。
dask 的 DummyEncoder 示例:
from dask_ml.preprocessing import DummyEncoder
import pandas as pd
data = pd.DataFrame({
'B': ['a', 'a', 'a', 'b','c']
})
de = DummyEncoder()
de = de.fit(data)
testD = pd.DataFrame({'B': ['a','a']})
trans = de.transform(testD)
print(trans)
输出:
B_a
0 1
1 1
为什么不显示B_b、B_c?但是当我将testD 更改为这样时:
testD = pd.DataFrame({'B': ['a','a', 'b', 'c']})
结果是:
B_a B_b B_c
0 1 0 0
1 1 0 0
2 0 1 0
3 0 0 1
sklearn的OneHotEncoder示例(LabelEncoding之后):
from sklearn.preprocessing import OneHotEncoder
import pandas as pd
data = pd.DataFrame({
'B': [1, 1, 1, 2, 3]
})
encoder = OneHotEncoder()
encoder = encoder.fit(data)
testdf = pd.DataFrame({'B': [2, 2]})
trans = encoder.transform(testdf).toarray()
pd.DataFrame(trans, columns=encoder.active_features_)
输出:
1 2 3
0 0.0 1.0 0.0
1 0.0 1.0 0.0
如何获得相同的结果?我想要这样的原因是因为我将对列的子集进行编码,然后将生成的 encoded_df 连接到主 df 以及从主 df 中删除的主列。
如下所示(主df):
A B C
0 M 1 10
1 F 2 20
2 T 3 30
3 M 4 40
4 F 5 50
5 F 6 60
预期输出:
A_F A_M A_T B C
0 0 1 0 1 10
1 1 0 0 2 20
2 0 0 1 3 30
3 0 1 0 4 40
4 1 0 0 5 50
5 1 0 0 6 60
编辑:
由于 dask 内部使用 pandas,我相信它使用 get_dummies。这就是DummyEncoder 的行为方式。如果有人能指出一种在熊猫中做同样事情的方法,我们也将不胜感激。
【问题讨论】:
标签: python pandas dask one-hot-encoding