scikit-learn报”ValueError: Input contains NaN, infinity or a value too large for dtype(‘float64’). “的原因以及解决办法

  • Post category:Python

该错误通常表示输入包含NaN、无穷大或较大的值,这可能是由于数据缺失,编程错误或其他原因导致的。以下是一些可能的解决办法:

  1. 检查数据集中是否存在空值,使用isnull函数检查是否存在缺失值,使用fillna函数将缺失值填充为特定的值或使用dropna函数删除缺失值所在的行或列。

  2. 检查数据集是否包含无穷大或较大的值,如果有,可以使用replace将其替换为较小的值,也可以使用delete将包含这些值的行或列删除。

  3. 调整数据集的数据类型,数据类型应该正确匹配每个特征的范围。例如,整数特征应该使用int类型而不是float类型。

  4. 使用数据预处理技术,例如标准化或归一化,将数据缩放到一定的范围内,从而避免出现数值过大或过小的情况。

示例代码:

import pandas as pd
from sklearn.preprocessing import StandardScaler

# 读取数据集
df = pd.read_csv("data.csv")

# 检查是否有空值
print(df.isnull().sum())

# 填充缺失值
df = df.fillna(df.mean())

# 检查是否有无穷大或较大的值
print(df[df.isinf().any(1)])

# 删除包含无穷大或较大的值的行或列
df = df[~df.isin([np.nan, np.inf, -np.inf]).any(1)]

# 调整数据类型
df = df.astype({'int_feature': 'int32', 'float_feature': 'float32'})

# 标准化数据
scaler = StandardScaler()
df_scaled = scaler.fit_transform(df)