python - 除以零时如何获取值-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 值,但我不想一开始就生成它。
我能做些什么?
解决方案
在 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))
推荐阅读
- javascript - 为什么 toString() 即使没有任何对象或字符串可以调用
- symfony - 如何在 EasyAdmin 3 中添加自定义操作?
- android - 如何创建在 Android NDK 上运行的预构建库?
- python - Flask 无法在调试模式下重新启动,并且 Visual Studio 2019 中不支持颜色输出
- laravel - 在 Laravel 存储库模式中处理模型依赖项
- c++ - 不知道如何为我正在制作的课程增加价值
- java - 在 WSL 上安装 tomcat 9
- javascript - 仅当表单不为空时如何重定向,JavaScript 验证
- python - 使用 rowspan 在 tkinter 中画布未正确排列
- javascript - 使用 Laravel 和 Vue JS 上传多个文件