首页 > 解决方案 > 除以零时如何获取值-inf?

问题描述

计算数据框中两列之间的百分比差异时,我得到了一个烦人的结果。

这是我的数据示例:

19044   109328.6627 4.74084555
0   53655.32937 inf
0   52591.95235 inf
0   56103.29265 inf

第 1 列和第 2 列是我的数据框中的数字,第 3 列是我生成百分比变化。我认为,问题是当我除以 0 时,我得到了 inf。这会影响我以后的计算。

这是我的计算:

TestResults['diff'] = ((abs(TestResults['B']).astype(float) - abs(TestResults['A']).astype(float)) / abs(TestResults['A']).astype(float))

当我尝试这个命令时,我也得到了类似的结果:

TestResults['diff'] = TestResults['B'].sub(df['A'].shift()).div(df['A']).fillna(0)

我假设我可以做一个 df.column.replace 来摆脱 inf 值,但我不想一开始就生成它。

我能做些什么?

标签: pythonpandas

解决方案


在 numpy 中,您可以设置错误行为:

但是,可以使用 seterr 捕获除以零:

np.seterr(divide='raise')
np.divide(1, 0)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
FloatingPointError: divide by zero encountered in divide

https://docs.scipy.org/doc/numpy-1.13.0/reference/generated/numpy.divide.html

另一种选择是编写自己的 div 函数,例如:

def safe_div(x,y):
    if y == 0:
        return 0
    return x / y

在您的代码中:

TestResults['diff'] = safe_div(TestResults['B'].sub(df['A'].shift()),(df['A']).fillna(0))

推荐阅读