在計算數據框中兩列之間的百分比差異時,我得到了一個惱人的結果。這是我的數據示例: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
提交
取消