fit_transform 中的错误:输入包含 NaN、无穷大或对于 dtype('float64') 而言太大的值

Posted

技术标签:

【中文标题】fit_transform 中的错误:输入包含 NaN、无穷大或对于 dtype(\'float64\') 而言太大的值【英文标题】:Error in fit_transform: Input contains NaN, infinity or a value too large for dtype('float64')fit_transform 中的错误:输入包含 NaN、无穷大或对于 dtype('float64') 而言太大的值 【发布时间】:2017-09-06 05:23:22 【问题描述】:

我有一个形状为 (14407, 2564) 的数据框。我正在尝试使用 VarianceThreshold 函数删除低方差特征。但是,当我调用 fit_transform 时,出现以下错误:

ValueError:输入包含 NaN、无穷大或对于 dtype('float64') 来说太大的值。

在使用 VarianceThreshold 之前,我使用以下代码替换了我的 df 中的所有缺失值:

    df.replace('null',np.NaN, inplace=True)
    df.replace(r'^\s*$', np.NaN, regex=True, inplace=True)
    df.fillna(value=df.median(), inplace=True)

我随后使用以下方法检查了我的数据框是否有任何空/无限值:

    m = df.isnull().any()
    print "========= COLUMNS WITH NULL VALUES ================="
    print m[m]
    print "========= COLUMNS WITH INFINITE VALUES ================="
    m = np.isfinite(df.select_dtypes(include=['float64'])).any()
    print m[m]

我得到一个空系列作为输出,这意味着我的所有列都没有任何缺失值。输出是:

    ========= COLUMNS WITH NULL VALUES =================
    Series([], dtype: bool)
    ========= COLUMNS WITH INFINITE VALUES =================
    Series([], dtype: bool)

完整的错误跟踪:

    Traceback (most recent call last):
      File "/home/users/MyUsername/MyProject/src/main/python/Main.py", line 222, in <module>
        main()
      File "/home/users/MyUsername/MyProject/src/main/python/Main.py", line 218, in         main
        getAllData()
      File "/home/users/MyUsername/MyProject/src/main/python/Main.py", line 95, in getAllData
        predictors, labels, dropped_features = fselector.process(variance=True, corr=True, bestf=True, bestfk=200)
      File         "/home/users/MyUsername/MyProject/src/main/python/classes/featureselector.py", line 54, in process
        self.getVariance(threshold=(.95 * (1 - .95)))
      File "/home/users/MyUsername/MyProject/src/main/python/classes/featureselector.py", line 136, in getVariance
        self.removeLowVarianceColumns(df=self.X, thresh=threshold)
      File "/home/users/MyUsername/MyProject/src/main/python/classes/featureselector.py", line 213, in removeLowVarianceColumns
        selector.fit_transform(df)
      File "/usr/lib64/python2.7/site-packages/sklearn/base.py", line 494, in fit_transform
        return self.fit(X, **fit_params).transform(X)
      File "/usr/lib64/python2.7/site-packages/sklearn/feature_selection/variance_threshold.py", line 64, in fit
        X = check_array(X, ('csr', 'csc'), dtype=np.float64)
    File "/usr/lib64/python2.7/site-packages/sklearn/utils/validation.py", line 407, in check_array
        _assert_all_finite(array)
    File "/usr/lib64/python2.7/site-packages/sklearn/utils/validation.py", line 58, in _assert_all_finite
    " or a value too large for %r." % X.dtype)
    ValueError: Input contains NaN, infinity or a value too large for dtype('float64').

所以,我不确定要检查什么,这似乎不是缺失值问题,但我也无法获得导致问题的列/值。

我在这里看到几个线程都以缺失值结束,但这似乎不是这里的问题。

【问题讨论】:

您应该始终发布错误的完整堆栈跟踪 @VivekKumar 我已将其添加到帖子中 先将其转换为np数组X = np.asanyarray(df)。然后,检查以下两个语句是否返回true或false:1)np.isfinite(X.sum())2)np.isfinite(X).all() 【参考方案1】:

我通过将数据转换为数字来解决这个问题。看来,虽然错误消息指出“float64”,但我的数据只是所有对象,并且对象不能很好地与 fit_transform 配合使用。

使用以下方法将我的数据更改为浮动: df = df.apply(lambda x: pd.to_numeric(x,errors='ignore')) 解决了这个问题。

【讨论】:

以上是关于fit_transform 中的错误:输入包含 NaN、无穷大或对于 dtype('float64') 而言太大的值的主要内容,如果未能解决你的问题,请参考以下文章

如何编写具有两个输入的 fit_transformer 并将其包含在 python sklearn 的管道中?

LabelEncoder.fit_transform() 的类型错误

sklearn PCA fit_transform() 是不是居中输入变量?

为啥 SimpleImputer 的 fit_transform 不适用于 google colab 中的数据框?

`ColumnTransformer.fit_transform()`的结果只包含后来的transfromer的结果[关闭]

使用 cv.fit_transform(corpus).toarray() 的内存错误