2014-10-01 25 views
6
của NaN

Tôi tổng hợp khung dữ liệu Pandas của tôi: data. Cụ thể, tôi muốn lấy số tiền trung bình và tổng là amount s theo số [origintype]. Đối với trung bình và tổng hợp Tôi đã thử các chức năng NumPy dưới đây:Kết quả Pandas bỏ qua số

import numpy as np 
import pandas as pd 
result = data.groupby(groupbyvars).agg({'amount': [ pd.Series.sum, pd.Series.mean]}).reset_index() 

Vấn đề của tôi là cột amount bao gồm NaN s, gây ra các result của mã ở trên để có nhiều NaN trung bình và số tiền.

Tôi biết cả hai pd.Series.sumpd.Series.meanskipna=True theo mặc định, vậy tại sao tôi vẫn nhận được NaN s tại đây?

Tôi cũng đã cố gắng này, mà rõ ràng đã không làm việc:

data.groupby(groupbyvars).agg({'amount': [ pd.Series.sum(skipna=True), pd.Series.mean(skipna=True)]}).reset_index() 

EDIT: Sau khi gợi ý @ Korem, tôi cũng đã cố gắng sử dụng một partial như sau:

s_na_mean = partial(pd.Series.mean, skipna = True)  
data.groupby(groupbyvars).agg({'amount': [ np.nansum, s_na_mean ]}).reset_index() 

nhưng gặp lỗi này:

error: 'functools.partial' object has no attribute '__name__' 
+1

Bạn có thể đăng một số dữ liệu mẫu không? Ngoài ra, để bắt đầu, thay vì 'pd.Series.sum' - chỉ cần sử dụng' 'sum'' - mã nên có đường dẫn nhanh hơn. – chrisb

+0

Cảm ơn bạn, tôi đã quyết định sử dụng 'pd.Series.sum' jus bởi vì nó có tùy chọn' skipna'. Đọc câu trả lời của Reading @ Korem, bây giờ tôi sử dụng 'np.nansum'. Nhưng 'np.nanmean' không có sẵn trong phiên bản của tôi (1.7.1) của numpy.I sẽ cố gắng đăng dữ liệu đại diện, có thể mất một lúc. – Rhubarb

Trả lời

5

Sử dụng NumPy của nansumnanmean:

from numpy import nansum 
from numpy import nanmean 
data.groupby(groupbyvars).agg({'amount': [ nansum, nanmean]}).reset_index() 

Là một workaround cho phiên bản cũ của NumPy, và cũng là một cách để sửa chữa thử cuối cùng của bạn:

Khi bạn làm pd.Series.sum(skipna=True) bạn thực sự gọi phương thức. Nếu bạn muốn sử dụng nó như thế này bạn muốn xác định một partial. Vì vậy, nếu bạn không có nanmean, hãy xác định s_na_mean và sử dụng:

from functools import partial 
s_na_mean = partial(pd.Series.mean, skipna = True) 
+0

Cảm ơn bạn, tôi sử dụng ** numpy-1.7.1-py2.7-win32.egg **, nó không thích 'nanmean' ném lỗi: đối tượng' module 'không có thuộc tính' nanmean''. (Tôi vừa kiểm tra, 'nanmean' là mới trong verison 1.8.0 – Rhubarb

+0

Nhưng' np.nansum' dường như được thêm vào trong phiên bản 1.8.0 là tốt. Đó là tò mò mà tôi không nhận được cùng một lỗi cho rằng ... – Rhubarb

+0

Cảm ơn Korem, tôi đã thử điều này nhưng nó không hoạt động, tôi đã chỉnh sửa câu hỏi của mình, đưa ra lỗi. Ngoài ra, không phải 'skipna = True' cho' pd.Series.mean' theo mặc định anyways? – Rhubarb

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