2016-07-24 5 views
2

Iはspectrum['I']がすべてゼロであるときはいつでも、次のコードpandas.applyは()<code>spectrum['diff']</code>すべて<code>nan</code>が含まれ、二つの列

def diff(row): 
     """ calculate absolute difference of this row """ 
     return np.abs(row['I'] - row['Imean']) 

    spectrum['diff'] = spectrum.apply(diff, axis=1) 

有する2つのパンダ列IImeanの絶対差を計算する差からNaNを返し。何が欠けていますか? は、情報が追加さ

(私は...まだ私がすべてゼロの場合のspectrum['I']、その後spectrum['diff'] = spectrum['Imean']をチェックすると、エラーを回避することができますが。):

[OK]を、私はさらに調査し、私の問題を突き止め。私は曲線の下の領域でデータを正規化し、すべてゼロのデータが存在する可能性があることを知っているので、ゼロによる除算を避けようとします。

s = spectrum['I'].sum() 
    try: 
     spectrum['I'] /= s 
    except ValueError: 
     spectrum['I'] = 0.0 

私は私のスクリプトからの実行時の警告を取得していないが、私はIpythonコンソールで私のコードを実行する場合、私はRuntimeWarning: invalid value encountered in true_dividespectrum['I']NaN Sで置き換えられますを取得します。私がZeroDivisionErrorを使用する場合も同じです。 ここでゼロ除算を正しく行うにはどうすればいいですか?

+1

あなたが逃したものがたくさんあるかもしれませんが、私が見逃した最初のことは、サンプルデータセットでした。質問をするときは、これらの基準に従ってください:http://stackoverflow.com/help/mcve – piRSquared

答えて

1

私が正しく理解していれば、あなたはこのようにそれを行うことができます。

In [6]: df = pd.DataFrame(np.random.randint(0, 20, (10,2)), columns=['I', 'Imean']) 

In [7]: df['diff'] = (df['I'] - df['Imean']).abs() 

In [8]: df 
Out[8]: 
    I Imean diff 
0 2  9  7 
1 9  1  8 
2 18  11  7 
3 6  19 13 
4 5  12  7 
5 4  8  4 
6 13  3 10 
7 1  19 18 
8 6  5  1 
9 7  0  7 

すべてゼロ:

In [9]: df.I=0 

In [10]: df 
Out[10]: 
    I Imean diff 
0 0  9  7 
1 0  1  8 
2 0  11  7 
3 0  19 13 
4 0  12  7 
5 0  8  4 
6 0  3 10 
7 0  19 18 
8 0  5  1 
9 0  0  7 

In [11]: df['diff'] = (df['I'] - df['Imean']).abs() 

In [12]: df 
Out[12]: 
    I Imean diff 
0 0  9  9 
1 0  1  1 
2 0  11 11 
3 0  19 19 
4 0  12 12 
5 0  8  8 
6 0  3  3 
7 0  19 19 
8 0  5  5 
9 0  0  0 

@piRSquaredはすでに、常に再現可能なサンプルと所望のデータ・セットを提供してください言及したようにPSパンダの質問をする

関連する問題