【问题标题】:SimpleImputer ValueErrorSimpleImputer ValueError
【发布时间】:2021-04-29 14:49:54
【问题描述】:

我正在尝试用平均值替换 NaN,但是当我执行 fit 方法时出现此错误:

ValueError: 输入包含 NaN、无穷大或一个太大的值 dtype('float64').

这是我的代码:

from sklearn.impute import SimpleImputer
imp = SimpleImputer(missing_values = "NaN", strategy = "mean")
imp = imp.fit(df_missing.iloc[:, 1:4])

在您将其标记为转发之前,我知道我也可以导入 numpy 并使用 np.nan 而不是“NaN”,但是没有办法解决它并坚持使用 pandas 和 SimpleImputer 吗?我正在学习在线课程,我想尽可能地坚持下去;不幸的是,它显然已经过时了,例如,它仍在运行

from sklearn.preprocessing import Imputer

【问题讨论】:

  • df.fillna(df.mean())?
  • 建议实际上是为了熟悉 sklearn,我知道我可以用 pandas 或 numpy 来做,但我想知道我是否也可以用 SimpleImputer 来做

标签: python pandas scikit-learn


【解决方案1】:

我不确定我是否清楚地理解了您的问题,但我假设您要估算的列中不是pd.NA or np.nan,而是"NaN"(一个对象类型)。如果是这种情况,有办法解决它:

df_missing.iloc[:, 1:4] = df_missing.iloc[:, 1:4].replace({"NaN": np.nan})

这样做,首先将"NaN"替换为np.nan,然后就可以使用SimpleImputer了:

imp = SimpleImputer(strategy = "mean")
imp = imp.fit(df_missing.iloc[:, 1:4])

希望我正确理解了您的问题,并且此解决方案对您有所帮助!

【讨论】:

  • 正如我在问题中提到的,我试图完全避免使用 numpy。我正在学习的在线课程可能仍然使用一些已弃用的函数和库,所以我不确定它是否可以完成
【解决方案2】:

你可以设置imp对象;

imp = SimpleImputer(missing_values = np.nan, strategy = "mean")

【讨论】:

  • OP 已经声明“我知道我也可以导入 numpy 并使用 np.nan 而不是“NaN”,但是 [...]
猜你喜欢
  • 2021-04-19
  • 2021-08-03
  • 2020-06-17
  • 2021-02-01
  • 2019-05-23
  • 2022-01-25
  • 2020-04-07
  • 2022-11-18
  • 2022-11-13
相关资源
最近更新 更多