2015-10-31 10 views
7

私はPandasデータフレームの列をまたいで合計しようとしています。すべての列にNaNがあると、合計= 0が得られます。私はsum = NaNがドキュメントに基づいていると予想していました。ここで私が持っているものです:=pandasのすべてのNaNの合計はゼロを返しますか?

In [136]: df = pd.DataFrame() 

In [137]: df['a'] = [1,2,np.nan,3] 

In [138]: df['b'] = [4,5,np.nan,6] 

In [139]: df 
Out[139]: 
    a b 
0 1 4 
1 2 5 
2 NaN NaN 
3 3 6 

In [140]: df['total'] = df.sum(axis=1) 

In [141]: df 
Out[141]: 
    a b total 
0 1 4  5 
1 2 5  7 
2 NaN NaN  0 
3 3 6  9 

pandas.DataFrame.sumのドキュメントは、「全体の行/列がNAである場合、結果はNAになります」と言うので、私はなぜ「合計」理解していませんインデックス2のNaNではなく0になります。何が欠けていますか?

df['total'] = df.sum(axis=1)  
df.loc[df['a'].isnull() & df['b'].isnull(),'total']=np.nan 

又は

df['total'] = df.sum(axis=1)  
df.loc[df[['a','b']].isnull().all(1),'total']=np.nan 

後者のオプションは、おそらく、より実用的であるので:

+0

FYI予想通りにNaNを取得します(0.17.0)。 – DSM

+0

ありがとうございます。 。 。私は0.17.0も走っているので、これはさらに困惑しています。 – dgd

+2

TBHこれはバグレポートのようになってきています。私は 'pd.show_versions()'を見ようとしていましたが、SOよりもgithubのほうが良く適合しています。 :-) – DSM

答えて

1

溶液は、行はすべてのNaNであるすべてのケースを選択しNaNに和を設定することであろうあなたが合計したいかもしれない列['a','b', ... , 'z']のリストを作成することができます。

関連する問題