【问题标题】:Why numpy.sum on dataframe columns return inf?为什么数据框列上的 numpy.sum 返回 inf?
【发布时间】:2020-04-21 06:42:18
【问题描述】:

我有一个带有 float64 类型列的 Pandas 数据框

我尝试通过numpy.sum在某些列上计算应用求和函数

当我激活函数 np.sum(x[col_name]) 时,我收到了 'inf' 的结果

但是当我检查np.where(np.isinf(x[col_name])) 的“inf”值在哪里时,我收到了空结果。

那么,我做错了什么……

谢谢。

【问题讨论】:

  • 你能提供一个数据样本吗?
  • 不,很遗憾,数据受到限制。我看数据,数据不包含任何inf号
  • 那我不知道该说什么了。看看 np.nansum:docs.scipy.org/doc/numpy/reference/generated/numpy.nansum.html 它将 NaN 视为 0
  • 好的,在我挖掘数据后,我发现像 1.79600000007e+308 这样的数字,np 没有将此数字识别为 nan 而不是 inf,
  • 试试这个:用 dtype=object 替换 float64

标签: python pandas numpy dataframe


【解决方案1】:

问题似乎是您数据中的一个数字大于np.float64 接受的最大值。如果你运行 np.finfo(np.float64),你会看到这个 dtype 接受的最大数字:

Machine parameters for float64
---------------------------------------------------------------
precision =  15   resolution = 1.0000000000000001e-15
machep =    -52   eps =        2.2204460492503131e-16
negep =     -53   epsneg =     1.1102230246251565e-16
minexp =  -1022   tiny =       2.2250738585072014e-308
maxexp =   1024   max =        1.7976931348623157e+308
nexp =       11   min =        -max
--------------------------------------------------------------

根据这个答案:https://stackoverflow.com/a/37272717/4014051 python 对象使用任意长度的实现,因此解决方案是使数组的 dtype 为object。这意味着您的代码总体上会变慢,因为您的数据不是 numpy 对象,但大概它会输出正确的总和。

【讨论】:

    猜你喜欢
    • 2019-08-21
    • 1970-01-01
    • 2022-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-25
    相关资源
    最近更新 更多