2017-10-27 5 views
0

Pythonを使用して新しいこと:異なるデータを使用してデータを正規化しようとしていますが、私にエラーを与えてください:ZeroDivisionErrorゼロ。ループを実行するときにバイパスエラーが0で除算される

正規化された値を計算するために、1つのデータフレームmergedfsとループスルー列があります。

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

ZeroDivisionErrorは、通常ゼロであることが多いためです。 mergedfs.ix [:、b] AND mergedfs.ix [:、b]は0に等しくなります。

これを回避する方法はありますか?

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

はあなたが分母として0を持っている場合に発生することが何を期待していますか? 'try'を使ってエラーをキャッチすることができますが、使用する置換値を指定する必要があります。 – Carcigenicate

+0

こんにちは@Carcigenicate私はちょうど彼らがゼロに等しい場合は、スキップしたいが、私はプロセスを停止したくない。 – Flora

+0

例外をキャッチし、例外ブロックで何が行われる必要があるかを示します。 https://docs.python.org/3/tutorial/errors.html – skrubber

答えて

1

try..exceptのコードをImbedして例外をキャッチします。 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 

で例外を無視する新しい方法は、例外を抑制することにある。

from contextlib import suppress 

with suppress(ZeroDivisionError): 
    {your code goes here} 
関連する問題