【问题标题】:ValueError: Input contains infinity or a value too large for dtype('float64')ValueError:输入包含无穷大或对于 dtype('float64') 来说太大的值
【发布时间】:2019-08-25 07:36:40
【问题描述】:

我需要帮助 我正在研究机器学习。 我尝试使用以下代码导入数据集:

    # Importing the libraries
    import numpy as np
    import matplotlib.pyplot as plt
    import pandas as pd

    # Importing the dataset
    dataset = pd.read_csv('Rural3.csv', low_memory=False)
    X = dataset.iloc[:, :-1].values
    y = dataset.iloc[:, 77].values

    # Splitting the dataset into the Training set and Test set
    from sklearn.model_selection import train_test_split
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.25, random_state = 0)

    # Feature Scaling
    from sklearn.preprocessing import StandardScaler
    sc = StandardScaler()
    X_train = sc.fit_transform(X_train)
    X_test = sc.transform(X_test)

但是,出现错误: ValueError: 输入包含无穷大或对于 dtype('float64') 来说太大的值

请问我该怎么办?我是python的新手。 提前致谢。

【问题讨论】:

  • 哪一行是错误?
  • XY 中可能只有np.inf 值需要您删除。您可以通过 dataset.iloc[dataset.values==np.inf] 之类的过滤器找到这些值
  • X_test = sc.transform(X_test) 应该是 X_test = sc.transform(X_test) 或更改上面的行
  • 非常感谢您回答我,但我该怎么做呢?我没听懂?
  • @yosemite_k ,错误出现在特征缩放部分..?!这有什么改变吗?

标签: python machine-learning


【解决方案1】:

如果您的数据具有非常大的值,请尝试规范化。你可以找到更多信息here

【讨论】:

  • 我使用了函数..但出现了另一个错误.. ValueError: Input contains NaN, infinity or a value too large for dtype ('float64') !
  • 好的,这意味着你也有空值。这是一个链接,可帮助您更好地预处理数据 - analyticsvidhya.com/blog/2016/07/…
  • 谢谢先生,我试图标准化,但总是同样的错误!我该如何处理 inf 和太大的值?例如,是否有任何其他类型的变量大于 float 64?我可以用 float 128 代替 float 64 吗?
  • 使用 min-max 归一化来获得 0 到 1 之间的值。并将 NaN 值替换为平均值或中值。如果您仍然遇到问题,请将您已预处理的数据输出发布到问题中。
【解决方案2】:

我建议您在使用 pandas 加载数据集后查看是否有空值:

dataset = dataset.dropna()

还要确保您的 X 值是数字,您可以使用 dataset.describe() 或 dataset.info():

print(dataset.info()) # will give you info about the dataset columns

您也可以尝试更新您的 sklearn,在某些版本的 sklearn 中存在一个已知错误(我不记得是哪一个)

# if you are using conda
conda install scikit-learn 
# if you are using pip
pip install -U scikit-learn 

【讨论】:

  • 非常感谢先生回答我,我应用了 dataset.info 函数,结果我的数据集包含:float64(75)、int64(1)、object(2) .知道我的基础只包含数值!什么是对象 dtype ?我该如何处理这件事?
  • 这意味着您的数据集中有非数值。对象是一种既不是数字,也不是日期时间等的数据类型。从 dataset.info() 我们看到您有两个功能未被识别为数字现在尝试执行以下操作dataset = dataset[dataset.applymap(np.isreal).any(1)]
【解决方案3】:

这个错误有时很容易引起误解。 如果您在数据集中有空白值(这意味着数据集中的某些特征有空白值),即使您也可以得到这种类型的错误。 我们如何解决这个问题...

  1. 隐藏数据框并将其导出为 csv。下面是代码“df”是数据框 数据框转 CSV
compression_opts = dict(method='zip',archive_name='out.csv')  
df.to_csv('out.zip', index=False, compression=compression_opts) 

你也可以试试这个

df[df['column_name'] == ''].index
  1. 通过分析输出 CSV 识别具有空白值的特征。

  2. 通过以下代码删除具有空白值的完整记录

df = df.dropna(subset=['column_name'])

【讨论】:

    【解决方案4】:

    这个方案效果很好,修复了变电时的错误

    df =df[~df.isin([np.nan, np.inf, -np.inf]).any(1)]
    

    【讨论】:

      猜你喜欢
      • 2017-11-23
      • 2016-07-31
      • 2020-08-16
      • 2020-05-25
      • 2019-02-17
      • 2020-10-23
      • 1970-01-01
      • 2023-01-11
      • 2020-07-19
      相关资源
      最近更新 更多