Reputation: 285
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
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