除以零时如何得到 -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 值,但我不想一开始就生成它。


我能做些什么?


三国纷争
浏览 94回答 1
1回答

MYYA

在 numpy 中你可以设置错误行为:然而,除以零可以使用 seterr 捕获:np.seterr(divide='raise')np.divide(1, 0)Traceback (most recent call last):&nbsp; File "<stdin>", line 1, in <module>FloatingPointError: divide by zero encountered in dividehttps://docs.scipy.org/doc/numpy-1.13.0/reference/generated/numpy.divide.html另一种选择是编写自己的 div 函数,例如:def safe_div(x,y):&nbsp; &nbsp; if y == 0:&nbsp; &nbsp; &nbsp; &nbsp; return 0&nbsp; &nbsp; return x / y在你的代码中:TestResults['diff'] = safe_div(TestResults['B'].sub(df['A'].shift()),(df['A']).fillna(0))
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python