【问题标题】:Value Error upon normalisation: array must not contain infs or NaNs标准化时的值错误:数组不得包含 infs 或 NaN
【发布时间】:2016-03-17 17:55:14
【问题描述】:

我正在尝试使用“.apply(np.log10)”来规范化我的数据,但在规范化后,一些行会变成 -inf。当我想在标准化后绘制数据分布时,我想知道是否有人可以帮助我解决以下问题: 1- 如何使用 Pandas 删除包含 Nans 或 inf 的行? 2- 解释为什么会发生这种情况。

【问题讨论】:

  • 调用 dropnanp.log10(df.dropna()) 应该可以工作

标签: python pandas data-structures


【解决方案1】:

inf 通常是因为您除以零而发生的。因为您使用的是日志,所以如果您使用零日志,您会得到一个inf

您可以删除所有包含 NaN 和 Infs 的行,如下所示:

np.random.seed(0)
df = pd.DataFrame(np.random.randn(5, 3), columns=list('ABC'))
df.iat[0, 0] /= 0  # Add an inf
df.iat[-1, -1] = np.nan  # Add a NaN

>>> df
          A         B         C
0       inf  0.400157  0.978738
1  2.240893  1.867558 -0.977278
2  0.950088 -0.151357 -0.103219
3  0.410599  0.144044  1.454274
4  0.761038  0.121675       NaN

>>> df[df.apply(np.isfinite).all(axis=1)]
          A         B         C
1  2.240893  1.867558 -0.977278
2  0.950088 -0.151357 -0.103219
3  0.410599  0.144044  1.454274

【讨论】:

    猜你喜欢
    • 2021-07-07
    • 2016-01-31
    • 2017-05-04
    • 2019-10-31
    • 2016-06-16
    • 2013-10-13
    • 2021-03-17
    • 2021-07-20
    • 2016-06-20
    相关资源
    最近更新 更多