OneHotEncoder ValueError:找到未知类别

问题描述 投票:0回答:1

我正在使用完整文件构建OneHotEncoder。

def buildOneHotEncoder(training_file_name, categoricalCols):
    one_hot_encoder = OneHotEncoder(sparse=False)

    df = pd.read_csv(training_file_name, skiprows=0, header=0)
    df = df[categoricalCols]
    df = removeNaN(df, categoricalCols)
    logging.info(str(df.columns))
    one_hot_encoder.fit(df)
    return one_hot_encoder
def removeNaN(df, categoricalCols):
    # Replace any NaN values
    for col in categoricalCols:
        df[[col]] = df[[col]].fillna(value=CONSTANT_FILLER)
    return df

现在在分块处理相同文件时,我正在使用相同的编码器

for chunk in pd.read_csv(training_file_name, chunksize=CHUNKSIZE):
....
  INPUT = chunk[categoricalCols]
  INPUT = removeNaN(INPUT, categoricalCols)
  one_hot_encoded = one_hot_encoder.transform(INPUT)
....

它给我错误'ValueError:转换期间在第2列中发现了未知类别['missing']'

我无法一次处理完整文件,因为在训练迭代期间必须使用所有内核的内存。

scikit-learn categorical-data one-hot-encoding feature-engineering
1个回答
0
投票

问题在于条款在哪里适用

df_merged_set_test = chunk.where(chunk ['weblab'] ==“缺失”)

我基于a字段过滤数据集,因此对于所有行,它都填充NaN。后来我将它们替换为丢失的标志。

正确方法

  1. 清理数据集,即填写所有列的所有na值
  2. 然后过滤并丢弃NaN行,即所有值NaN行.where(chunk ['weblab'] ==“ missing”)。dropna()
© www.soinside.com 2019 - 2024. All rights reserved.