Ошибка значения: входные данные содержат бесконечность или слишком большое значение для dtype (‘float64’)

#python #machine-learning

#python #машинное обучение

Вопрос:

мне нужна помощь, я работаю над машинным обучением. Я попытался импортировать набор данных, используя этот код:

     # 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)
  

Однако появляется ошибка:
Ошибка значения: входные данные содержат бесконечность или слишком большое значение для dtype (‘float64’)

Что мне делать, пожалуйста? я новичок в python. Заранее спасибо.

Комментарии:

1. в какой строке была ошибка?

2. Вероятно, есть только np.inf значения в X или Y , которые вам нужно удалить. Вы можете найти эти значения с помощью фильтра, подобного dataset.iloc[dataset.values==np.inf]

3. X_test = sc.transform(X_test) должно быть X_test = sc.transform(X_test) или изменить строку выше

4. большое спасибо, что ответили мне, но что именно я должен делать? я не понял?

5. @yosemite_k , ошибки появляются в разделе масштабирования объектов .. ?! это что-то меняет?

Ответ №1:

Это решение работает хорошо, исправлена ошибка при преобразовании мощности

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

Ответ №2:

Я бы посоветовал вам посмотреть, есть ли у вас значения null, после загрузки набора данных с помощью 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 
  

Комментарии:

1. Большое спасибо, сэр, за ответ, я применил dataset.info функция, и в результате она выдает мне, что мой набор данных содержит: float64 (75), int64(1), object(2). Зная, что моя база содержит только числовые значения!! что такое объект dtype? и как я могу справиться с этим?

2. это означает, что у вас есть нечисловые значения в вашем наборе данных. объект — это тип данных, который не является ни числовым, ни датированным временем и т.д. Из dataset.info () мы видим, что у вас есть две функции, которые не распознаются как числовые, теперь попробуйте выполнить следующее dataset = dataset[dataset.applymap(np.isreal).any(1)]

Ответ №3:

Попробуйте нормализовать, если ваши данные имеют очень большие значения. Вы можете найти больше информации здесь

Комментарии:

1. я использовал функцию .. но появилась другая ошибка.. Ошибка значения: входные данные содержат NaN, бесконечность или слишком большое значение для dtype (‘float64’) !

2. Хорошо, это означает, что у вас также есть значения null. Вот ссылка, которая поможет вам лучше выполнить предварительную обработку ваших данных — analyticsvidhya.com/blog/2016/07 /…

3. Спасибо, сэр, я пытался нормализовать, но это всегда одна и та же ошибка! как я могу справиться с inf и слишком большим значением? существует ли какой-либо другой тип переменной, например, больший, чем float 64? значение с плавающей точкой 128, которое я могу использовать вместо значения с плавающей точкой 64?

4. Используйте нормализацию min-max для получения значений от 0 до 1. И замените значения NaN либо средним, либо медианным. Если вы все еще сталкиваетесь с проблемой, опубликуйте выходные данные, которые вы предварительно обработали для ответа на вопрос.

Ответ №4:

Эта ошибка иногда вводит в заблуждение. если у вас есть пустые значения в наборе данных (что означает, что определенные функции в наборе данных имеют пустые значения), даже тогда вы можете получить ошибку такого типа. Как нам это решить…

  1. Скройте фрейм данных и экспортируйте их в csv. ниже приведен код «df» — это фрейм данных Dataframe в 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'])
  

Ответ №5:

 import numpy as np

df_new = df[np.isfinite(df).all(1)]
  

Это удаляет строки, содержащие значения infinity или NaN