在 sklearn.preprocessing 模块中,我得到 ValueError: Found array with 0 feature(s)

Posted

技术标签:

【中文标题】在 sklearn.preprocessing 模块中,我得到 ValueError: Found array with 0 feature(s)【英文标题】:In sklearn.preprocessing module I get ValueError: Found array with 0 feature(s) 【发布时间】:2018-11-29 21:02:36 【问题描述】:

我看到一堆问题都有这个错误,但我无法理解与我的代码或问题的关系。

我正在尝试修复从 Internet 上找到的示例 CSV 文件获得的数据中的 NaN 值。我的代码其实很简单:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

# Importing stuff.
from sklearn.preprocessing import Imputer
import pandas

# Loading the corrupt data
corrupt_data = pandas.read_csv('SampleCorruptData.csv')

#Creating Imputer object
imputer = Imputer(missing_values = 'NaN', strategy= "mean", axis = 0)

owner_id = corrupt_data.iloc[:,2:]

print(owner_id)

imputer = imputer.fit(owner_id.iloc[:,2:])

owner_id.iloc[:,2:] = imputer.transform(owner_id[:,2:])

print(owner_id)

CSV 文件:

GroupName,Groupcode,GroupOwner
System Administrators,sysadmin,13456
Independence High Teachers,HS Teachers,
John Glenn Middle Teachers,MS Teachers,13458
Liberty Elementary Teachers,Elem Teachers,13559
1st Grade Teachers,1stgrade,NaN
2nd Grade Teachers,2nsgrade,13561
3rd Grade Teachers,3rdgrade,13562
Guidance Department,guidance,NaN
Independence Math Teachers,HS Math,13660
Independence English Teachers,HS English,13661
John Glenn 8th Grade Teachers,8thgrade,
John Glenn 7th Grade Teachers,7thgrade,13452
Elementary Parents,Elem Parents,NaN
Middle School Parents,MS Parents,18001
High School Parents,HS Parents,18002

你可以看到 NaN 值。

我得到的错误:

Traceback (most recent call last):

  File "<ipython-input-21-1bfc8eb216cc>", line 1, in <module>
    runfile('/home/teoman/Desktop/data science/Fix Corrupt Data/imputation.py', wdir='/home/teoman/Desktop/data science/Fix Corrupt Data')

  File "/usr/lib/python3/dist-packages/spyder/utils/site/sitecustomize.py", line 866, in runfile
    execfile(filename, namespace)

  File "/usr/lib/python3/dist-packages/spyder/utils/site/sitecustomize.py", line 102, in execfile
    exec(compile(f.read(), filename, 'exec'), namespace)

  File "/home/teoman/Desktop/data science/Fix Corrupt Data/imputation.py", line 18, in <module>
    imputer = imputer.fit(owner_id.iloc[:,2:])

  File "/home/teoman/.local/lib/python3.5/site-packages/sklearn/preprocessing/imputation.py", line 155, in fit
    force_all_finite=False)

  File "/home/teoman/.local/lib/python3.5/site-packages/sklearn/utils/validation.py", line 470, in check_array
    context))

ValueError: Found array with 0 feature(s) (shape=(15, 0)) while a minimum of 1 is required.

我在这里做错了什么?

【问题讨论】:

您不需要在fit 中索引owner_id,因为您已经完成了。 imputer = imputer.fit(owner_id) 应该可以工作。 transform 方法中类似。 我无法解释为什么,因为我还在学习,但后来我收到了TypeError: unhashable type: 'slice' @ncfirth 实际上,在玩了一段时间之后,你是对的。 【参考方案1】:

如果我们跟踪您的错误,我们可以找到解决方案

你的错误是:

ValueError: 找到具有 0 个特征的数组 (shape=(15, 0)),而至少需要 1 个。

基本上它正在寻找至少 1 个功能。如果我们查看docs of imputer: 参数: X : numpy 形状数组 [n_samples, n_features]

在您的情况下,您有 15 个 n_samples 和 0 个 n_features 如果您转换数据并使 n_features > 0 ,您的问题将得到解决。

保留挖掘的 1D numpy 数组返回 0 列,如果您使用 numpy.reshape() 函数对其进行整形或将其转换为 pd.DataFrame,您可以获得 1 个 n_features。

希望对你有帮助

谢谢

【讨论】:

感谢您的宝贵时间,我基本上将这部分代码:owner_id.iloc[:,2:] = imputer.transform(owner_id[:,2:]) 改为:owner_id.iloc[:,2:] = imputer.transform(owner_id.iloc[:,2:]) 我还没有意识到这一点。简单但重要的一点。 Tesekkurler

以上是关于在 sklearn.preprocessing 模块中,我得到 ValueError: Found array with 0 feature(s)的主要内容,如果未能解决你的问题,请参考以下文章

sklearn.preprocessing.LabelBinarizer

sklearn.preprocessing.OneHotEncoder

sklearn.preprocessing中standardscaler和Normalizer之间的区别

2.2sklearn.preprocessing.PolynomialFeatures生成交叉特征

sklearn.preprocessing.PolynomialFeatures多项式特征

sklearn.preprocessing.scale 和standardscale的区别