使用OneHotEncoder()的更好方法是什么?

时间:2019-12-25 20:02:13

标签: python pandas scikit-learn

此刻,我有一个熊猫df xx有一个字符串列Name,我希望在Scikit-Learn管道中使用OneHotEncoder()。但是,我首先要操纵Name列(格式,剥离和调整),并且发现可以为此构建自己的转换器。看起来像这样:

class NameModifier(BaseEstimator, TransformerMixin):
   def __init__(self):
      pass
   def fit(self, X, y=None):
      return self
   def transform(self, X, y=None):
      new_name_df = modifyAndReturnNewDataFrame(X)
      return new_name_df

然后我有了这个管道:

my_pipeline = ColumnTransformer([
   ("modify_name", NameModifier(), ["Name"]),
   ("encode_name", OneHotEncoder(), ["Name"])
])

# get prepared data
prepared_data = my_pipeline.fit_transform(x)

这不符合我的预期;看来我的管道首先格式化了名称,但是OneHotEncoder()实际上并未对修改后的Name列进行编码,而是对原始Name进行了编码(未经修改)。我该如何将这些更改整合到管道中?

1 个答案:

答案 0 :(得分:0)

如果数据位于Pandas DataFrame中,则在通过管道运行数据之前,我将使用apply

import pandas as pd

data = [['Name_1 Space  ', 123], ['Name_2 Space  ', 456]]

df = pd.DataFrame(data, columns=['Names', 'Numerics'])
df['Names'] = df.Names.apply(lambda col: col.strip().replace(' Space', '').upper())

print(df)

        Names  Numerics
0  pre NAME_1       123
1  pre NAME_2       456
相关问题