Flora
Flora

Reputation: 285

Bypass error Division by zero when doing a loop - Python

New using Python :) I am trying to normalise my data using different columns however, it sometimes occur that some columns I am using to make division have value = 0. Which then give me error: ZeroDivisionError by zero.

I have one dataframe mergedfs and loop through columns to calculate normalised values.

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)))))

The ZeroDivisionError by zero is usually because sometimes. mergedfs.ix[:,b] AND mergedfs.ix[:,b] will be equal to 0.

Is there a way to bypass it?

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)

However, no success.

I have searched for quite a while on stackoverflow and most didn't work on my code.

Thanks a lot if you can guide me a bit to solve this problem.

Cheers !

Upvotes: 0

Views: 3087

Answers (1)

skrubber
skrubber

Reputation: 1105

Imbed the code in try..except to catch the exception. Ignore the exception by pass

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

A novel way is to suppress the exception:

from contextlib import suppress

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

Upvotes: 2

Related Questions