2015-10-31 21 views
7

Tôi đang cố gắng tổng hợp trên các cột của một khung dữ liệu Pandas và khi tôi có NaN trong mỗi cột, tôi nhận được tổng = zero; Tôi đã mong đợi tổng = NaN dựa trên tài liệu. Đây là những gì tôi đã có:Tổng số tất cả các NaN trong gấu trúc trả về 0?

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 

Các tài liệu pandas.DataFrame.sum nói "Nếu một dòng toàn bộ/cột là NA, kết quả sẽ là NA", vì vậy tôi không hiểu tại sao "tổng" = 0 và không phải NaN cho chỉ mục 2. Tôi đang thiếu gì?

+0

FYI Tôi nhận được NaN như mong đợi (0,17.0.) – DSM

+0

Cảm ơn bạn đã nhập. . . Tôi đang chạy 0,17,0, vì vậy điều này thậm chí còn khó hiểu hơn. – dgd

+2

TBH điều này đang bắt đầu cảm thấy giống như một báo cáo lỗi-- Tôi đã về đề nghị xem xét 'pd.show_versions()', nhưng những người phù hợp tốt hơn trên github hơn trên SO. :-) – DSM

Trả lời

1

Một giải pháp sẽ được chọn tất cả các trường hợp hàng được tất cả-nan, sau đó thiết lập tổng để nan:

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

hoặc

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

Lựa chọn thứ hai có lẽ là thực tế hơn, bởi vì bạn có thể tạo danh sách các cột ['a','b', ... , 'z'] mà bạn có thể muốn tổng hợp.

Các vấn đề liên quan