在计算数据框中两列之间的百分比差异时,我得到了一个恼人的结果。这是我的数据示例:19044 109328.6627 4.740845550 53655.32937 inf0 52591.95235 inf0 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 值,但我不想一开始就生成它。我能做些什么?
1 回答
MYYA
TA贡献1868条经验 获得超4个赞
在 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))
添加回答
举报
0/150
提交
取消