2015-10-31 7 views
7

Ich versuche, über Spalten eines Pandas-Datenrahmens zu summieren, und wenn ich NaNs in jeder Spalte habe, bekomme ich sum = 0; Ich hatte erwartet, Summe = NaN basierend auf den Dokumenten. Hier ist, was ich habe:Summe über alle NaNs in Pandas ergibt Null?

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 

Die pandas.DataFrame.sum docs sagen: „Wenn eine ganze Zeile/Spalte NA ist, wird das Ergebnis sein, NA“, so verstehe ich nicht, warum „total“ = 0 und nicht NaN für Index 2. Was vermisse ich?

+0

FYI Ich bekomme NaN wie erwartet (0.17.0.) – DSM

+0

Danke für die Eingabe. . . Ich laufe auch 0.17.0, also ist das noch rätselhafter. – dgd

+2

TBH das fühlt sich mehr wie ein Bugreport an ... Ich wollte vorschlagen, 'pd.show_versions()' anzuschauen, aber diese passen besser zu Github als zu SO. :-) – DSM

Antwort

1

wäre eine Lösung auf alle Fälle aus, in dem alle Zeilen-nan sind, dann die Summe auf nan gesetzt:

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

oder

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

Letzteres ist wahrscheinlich praktischer, weil Sie können eine Liste der Spalten ['a','b', ... , 'z'] erstellen, die Sie summieren möchten.

Verwandte Themen