是否有办法使用sklearn.preprocessing对象来填补分类数据?我最终希望创建一个预处理对象,可以将其应用于新数据,并使其以与旧数据相同的方式进行转换。
我正在寻找一种方法,以便我可以按照这种方式使用它。
回答:
通过复制和修改这个答案,我为pandas.Series对象创建了一个填补器
import numpyimport pandas from sklearn.base import TransformerMixinclass SeriesImputer(TransformerMixin): def __init__(self): """填补缺失值。 如果Series的类型为Object,则使用最常见的对象进行填补。 如果Series的类型不是Object,则使用平均值进行填补。 """ def fit(self, X, y=None): if X.dtype == numpy.dtype('O'): self.fill = X.value_counts().index[0] else : self.fill = X.mean() return self def transform(self, X, y=None): return X.fillna(self.fill)
使用它时,您需要这样做:
# 创建一个seriess1 = pandas.Series(['k', 'i', 't', 't', 'e', numpy.NaN])a = SeriesImputer() # 初始化填补器a.fit(s1) # 拟合填补器s2 = a.transform(s1) # 获取一个新的系列