【发布时间】:2017-02-16 20:20:36
【问题描述】:
在某些列不需要编码的情况下,如何将 pandas 数据帧转换为 sklearn one-hot-encoded(数据帧/numpy 数组)?
mydf = pd.DataFrame({'Target':[0,1,0,0,1, 1,1],
'GroupFoo':[1,1,2,2,3,1,2],
'GroupBar':[2,1,1,0,3,1,2],
'GroupBar2':[2,1,1,0,3,1,2],
'SomeOtherShouldBeUnaffected':[2,1,1,0,3,1,2]})
columnsToEncode = ['GroupFoo', 'GroupBar']
是一个已经标签编码的数据帧,我只想编码columnsToEncode标记的列吗?
我的问题是我不确定pd.Dataframe 或numpy 数组表示是否更好,以及如何将编码部分与另一个重新合并。
到目前为止我的尝试:
myEncoder = OneHotEncoder(sparse=False, handle_unknown='ignore')
myEncoder.fit(X_train)
df = pd.concat([
df[~columnsToEncode], # select all other / numeric
# select category to one-hot encode
pd.Dataframe(encoder.transform(X_train[columnsToEncode]))#.toarray() # not sure what this is for
], axis=1).reindex_axis(X_train.columns, axis=1)
注意:我知道Pandas: Get Dummies / http://pandas.pydata.org/pandas-docs/stable/generated/pandas.get_dummies.html 但在我需要每次折叠都进行这种编码的训练/测试拆分中效果不佳。
【问题讨论】:
-
我并不完全清楚为什么 pre-one.hot 编码在使用训练/测试拆分时会出现问题(因为两组可能都需要这种编码;所以在拆分之前就这样做)。如果真的需要它,它可能可以使用 scikit-learn 的管道(在传递给分类器/回归器之前自动调用预处理)。另外:您始终可以使用 df.as_matrix() 来提取 numpy-array。
-
我明天必须尝试功能联合。关键是我需要每折叠执行一个特定的预处理步骤。
标签: python pandas numpy scikit-learn dummy-variable