Scikit learn OneHotEncoder值错误:找到未知类别
我正在使用完整文件构建OneHotEncoderScikit learn OneHotEncoder值错误:找到未知类别,scikit-learn,categorical-data,one-hot-encoding,feature-engineering,Scikit Learn,Categorical Data,One Hot Encoding,Feature Engineering,我正在使用完整文件构建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
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
现在,当我在块中处理相同的文件时,我使用相同的编码器
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']
我不能一次处理完整的文件,因为在训练迭代期间,需要内存才能使用所有核心 问题在于申请
df_merged_set_test = chunk.where(chunk['weblab']=="missing")
我是根据a字段过滤数据集的,所以对于它所在的所有行,都是NaN。后来我用丢失的旗帜替换了它们
正确的方法
。其中(chunk['weblab']==“missing”).dropna()
从任何nan数据中清除数据。 下面的代码显示了每列的nan数据计数
total_missing_data = data.isnull().sum().sort_values(ascending=False)
percent_of_missing_data = (data.isnull().sum()/data.isnull().count()*100).sort_values(ascending=False)
missing_data = pd.concat(
[
total_missing_data,
percent_of_missing_data
],
axis=1,
keys=['Total', 'Percent']
)
print(missing_data.head(10))
输出,例如:
Total Percent
年龄20.284091
要获得它,请访问以下位置:
df.loc[(数据['age'].isnull())]
然后使用mean或Meadien填充nan列:
df.age[62]=data.age.median()
或删除所有行:
df.dropna(inplace=True)
一种解决方法是使用
handle\u unknown=
参数初始化:
one\u hot\u encoder=onehotcoder(稀疏=False,句柄\u unknown='ignore')
df.dropna(inplace=True)