NaN'in

2014-10-01 8 views
6

görmezden geldiği Pandalar birikimi Pandalar veri grubunu topluyorum: data. Spesifik olarak, ortalama ve amount s değerini [origin ve type] ile elde etmek istiyorum. ortalama ve toplanmasıyla için aşağıda numpy fonksiyonları çalıştı:NaN'in

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

Sorunum amount kolon NaN ortalama ve toplamlar çok şey var için yukarıdaki kod result neden NaN s içerir olmasıdır.

ben hem pd.Series.sum ve pd.Series.mean varsayılan olarak skipna=True var biliyorum, bu yüzden neden hala burada NaN s alıyorum?

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

DÜZENLEME: @ bugune kadar geçen zaman önerisine üzerine , ben de aşağıda bir partial kullanmaya çalıştı:

Ben de tabii ki işe yaramadı bu, hangi çalıştı

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

ama bu hatayı alın:

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

bazı örnek verileri gönderir misiniz: Eğer nanmean yoksa eğer öyleyse, en s_na_mean tanımlamak ve bu kullanalım? Ayrıca, 'pd.Series.sum' yerine, '' sum'' kullanmanız yeterlidir - kod daha hızlı bir yol almalıdır. – chrisb

+0

Teşekkür ederim, 'pd.Series.sum' jus becasue 'skipna' seçeneği vardı kullanmaya karar verdim. Korem'in yanıtını okumak için şimdi 'np.nansum'unu kullanıyorum. Ama 'np.nanmean' benim numümüm versiyonumda (1.7.1) mevcut değil. Bir süre alabilecek temsili verileri yayınlamaya çalışacağım. – Rhubarb

cevap

5

Kullanım numpy en nansum ve nanmean: ayrıca eski Numpy sürümü ve için geçici çözüm olarak

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

son denemek düzeltmek için bir yol: Eğer pd.Series.sum(skipna=True) yaptığınızda

aslında yöntemini çağırın. Bunu kullanmak isterseniz, partial tanımlamak istiyorsunuz.

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

Teşekkür ederim, ben ** numpy-1.7.1-py2.7-win32.egg kullanın **, nanmean 'hata atma gibi değil:' 'modül' nesne 'nanmean' özniteliği yoktur. (Sadece kontrol ettim, 'nanmean' 1.8.0 – Rhubarb

+0

sürümünde yeni ama 'np.nansum '1.8.0 sürümünde de eklenmiş gibi görünüyor.Onun için aynı hatayı almıyorum merak ediyor ... – Rhubarb

+0

Teşekkürler Korem, bunu denedim ama işe yaramadı, sorumu düzenledim, hatayı verdim.Ayrıca, 'skipna =' 'pd.Series.mean' için varsayılan olarak zaten varsayılan değil? – Rhubarb