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上搜索了很长一段时间,但大多数人都没有使用我的代码。
多谢你能指导我解决这个问题。
干杯!
在
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} |