关于旁路错误执行循环时除以零 Python

Bypass error Division by zero when doing a loop - Python

使用python的新功能:)我正在尝试使用不同的列来规范化我的数据,但是,有时我使用的一些列的除法值为0。然后给我一个错误:零除以零。

我有一个数据框合并了df并通过列循环来计算标准化值。

1
2
3
4
5
6
7
8
9
10
b = 0
w = (len(files))+1 #number depending on how many csv files I have. This will determine which columns index I will use.
while b < len(files):
    b += 1
    if b == 1:
        w += 1
        mergedfs.insert(len(files)+1+b, 'NHAF R{}'.format(b), np.log10((((mergedfs.ix[:,b] / mergedfs.ix[:,w])/106)/((mergedfs.ix[:,b].sum() / (mergedfs.ix[:,w].sum())/106)) / sum(((mergedfs.ix[:,b] / mergedfs.ix[:,w])/106)/((mergedfs.ix[:,b].sum() / (mergedfs.ix[:,w].sum())/106))))))
    else:
         w += 2
         mergedfs.insert(len(files)+1+b, 'NHAF R{}'.format(b), np.log10(((mergedfs.ix[:,b] / mergedfs.ix[:,w])/106)/((mergedfs.ix[:,b].sum() / (mergedfs.ix[:,w].sum())/106)) / sum(((mergedfs.ix[:,b] / mergedfs.ix[:,w])/106)/((mergedfs.ix[:,b].sum() / (mergedfs.ix[:,w].sum())/106)))))

零分割误差通常是因为有时。mergedfs.ix[:,b]和mergedfs.ix[:,b]将等于0。

有没有办法绕过它?

1
I have tried np.log10((((mergedfs.ix[:,b] / mergedfs.ix[:,w])/106)/((mergedfs.ix[:,b].sum() / (mergedfs.ix[:,w].sum())/106)) / sum(((mergedfs.ix[:,b] / mergedfs.ix[:,w])/106)/((mergedfs.ix[:,b].sum() / (mergedfs.ix[:,w].sum())/106)))).where(mergedfs.ix[:,b] != 0)

但是,没有成功。

我在stackoverflow上搜索了很长一段时间,但大多数人都没有使用我的代码。

多谢你能指导我解决这个问题。

干杯!


try..except中嵌入代码以捕获异常。忽略pass的异常

1
2
3
4
5
6
7
8
9
10
11
12
try:
   while b < len(files):
    b += 1
    if b == 1:
        w += 1
        mergedfs.insert(len(files)+1+b, 'NHAF R{}'.format(b), np.log10((((mergedfs.ix[:,b] / mergedfs.ix[:,w])/106)/((mergedfs.ix[:,b].sum() / (mergedfs.ix[:,w].sum())/106)) / sum(((mergedfs.ix[:,b] / mergedfs.ix[:,w])/106)/((mergedfs.ix[:,b].sum() / (mergedfs.ix[:,w].sum())/106))))))
    else:
         w += 2
         mergedfs.insert(len(files)+1+b, 'NHAF R{}'.format(b), np.log10(((mergedfs.ix[:,b] / mergedfs.ix[:,w])/106)/((mergedfs.ix[:,b].sum() / (mergedfs.ix[:,w].sum())/106)) / sum(((mergedfs.ix[:,b] / mergedfs.ix[:,w])/106)/((mergedfs.ix[:,b].sum() / (mergedfs.ix[:,w].sum())/106)))))

except ZeroDivisionError as err:
   pass

一种新颖的方法是抑制例外:

1
2
3
4
from contextlib import suppress

with suppress(ZeroDivisionError):
  {your code goes here}