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

问题原因

该错误消息表明数据集中含有NaN、无穷大的值或超出了float64数据类型的最大值范围的值。由于scikit-learn只能处理数字数据,所以它无法处理NaN和无穷大的值。如果数据中有这些值,则需要将它们处理成可用的数字类型。

解决办法

  1. 删除包含NaN和无穷大的值的行。

    import pandas as pd
    import numpy as np
    
    # 创建数据集
    df = pd.DataFrame({'A': [1, 2, np.nan, 4], 'B': [5, 6, np.inf, 8]})
    
    # 删除包含NaN和无穷大的值的行
    df = df.dropna()
    df = df.replace([np.inf, -np.inf], np.nan).dropna()
  2. 用特定值替换NaN和无穷大的值。

    import pandas as pd
    import numpy as np
    
    # 创建数据集
    df = pd.DataFrame({'A': [1, 2, np.nan, 4], 'B': [5, 6, np.inf, 8]})
    
    # 用特定值替换NaN和无穷大的值
    df = df.replace([np.inf, -np.inf], np.nan).fillna(0)
  3. 使用Imputer类来填充NaN值。

    from sklearn.impute import SimpleImputer
    import numpy as np
    
    # 创建数据集
    X = [[1, 2], [np.nan, 3], [7, 6]]
    
    # 导入Imputer类
    imp = SimpleImputer(missing_values=np.nan, strategy='mean')
    
    # 填充NaN值
    X = imp.fit_transform(X)
  4. 检查数据类型是否正确,然后将其转换为float64。

    import pandas as pd
    
    # 创建数据集
    df = pd.DataFrame({'A': [1, 2, 3], 'B': ['4', '5', '6']})
    df['B'] = df['B'].astype(float)

以上是几种解决办法,具体根据情况选择即可。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:scikit-learn报”ValueError: Input contains NaN, infinity or a value too large for dtype(‘float64’) “的原因以及解决办法 - Python技术站

(0)
上一篇 2023年3月19日
下一篇 2023年3月19日

相关文章

合作推广
合作推广
分享本页
返回顶部