2012-07-12 4 views
5

मुझे पाइंडन दशमलव प्रकार मानों को पांडा TimeSeries/DataFrame ऑब्जेक्ट में स्टोर करने की आवश्यकता है। टाइमसरीज/डेटाफ्रेम पर "ग्रुपबी" और "माध्य" का उपयोग करते समय पांडस मुझे एक त्रुटि देता है। तैरता के आधार पर निम्न कोड में अच्छी तरह से काम करता है:पैंडस टाइमसरीज पर दशमलव विधि के साथ औसत विधि का उपयोग कैसे करें?

[0]: by = lambda x: lambda y: getattr(y, x) 

[1]: rng = date_range('1/1/2000', periods=40, freq='4h') 

[2]: rnd = np.random.randn(len(rng)) 

[3]: ts = TimeSeries(rnd, index=rng) 

[4]: ts.groupby([by('year'), by('month'), by('day')]).mean() 
2000 1 1 0.512422 
     2 0.447235 
     3 0.290151 
     4 -0.227240 
     5 0.078815 
     6 0.396150 
     7 -0.507316 

लेकिन मैं कोई त्रुटि मिलती है अगर तैरता के बजाय एक ही दशमलव मान का उपयोग कर कार्य करें:

[5]: rnd = [Decimal(x) for x in rnd]  

[6]: ts = TimeSeries(rnd, index=rng, dtype=Decimal) 

[7]: ts.groupby([by('year'), by('month'), by('day')]).mean() #Crash! 

Traceback (most recent call last): 
File "C:\Users\TM\Documents\Python\tm.py", line 100, in <module> 
print ts.groupby([by('year'), by('month'), by('day')]).mean() 
File "C:\Python27\lib\site-packages\pandas\core\groupby.py", line 293, in mean 
return self._cython_agg_general('mean') 
File "C:\Python27\lib\site-packages\pandas\core\groupby.py", line 365, in _cython_agg_general 
raise GroupByError('No numeric types to aggregate') 
pandas.core.groupby.GroupByError: No numeric types to aggregate 

त्रुटि संदेश है "GroupByError ('नहीं सांख्यिक प्रकार कुल के लिए')"। क्या टाइमसरीज़ या डेटाफ्रेम पर दशमलव, मानों सहित समेकन, माध्य, और क्वांटिलॉन जैसे मानक समेकन का उपयोग करने का कोई मौका है?

यह क्यों काम नहीं करता है और यदि संभव नहीं है तो समान रूप से तेज़ विकल्प रखने का कोई मौका है?

संपादित करें: मैं बस महसूस किया कि अन्य कार्यों (न्यूनतम, अधिकतम, मंझला, आदि) के सबसे ठीक नहीं बल्कि मतलब समारोह है कि मैं सख्त :-(जरूरत है काम

+1

मैं नहीं हूँ। निश्चित रूप से, लेकिन मैं हाल ही में उस मुद्दे में भी भाग गया। मैंने बस दशमलव() मानों को फ्लोट में पुन: स्थापित करने और फिर फ्लोट मानों के साथ डेटा फ्रेम बनाने का अंत किया। – reptilicus

उत्तर

11
import numpy as np 
ts.groupby([by('year'), by('month'), by('day')]).apply(np.mean) 
+0

यह ठीक है! धन्यवाद ईएमएस! – THM

+0

@ थॉमस एम उपयोगकर्ताओं को भी मदद करने के लिए प्रोत्साहित करता है आप, आपको जवाबों को ऊपर उठाना चाहिए (उत्तर के बाईं ओर ऊपर तीर पर क्लिक करना)। अगर कोई जवाब वास्तव में आपकी समस्या का समाधान करता है, तो आपको इसे भी स्वीकार करना चाहिए। एक प्रश्न स्वीकार करने के लिए, आपको नीचे दिए गए टिक चिह्न पर क्लिक करना होगा संख्या – kay

+3

इसके अलावा, आपको वास्तव में यहां लैम्ब्डा की ज़रूरत नहीं है, सिर्फ 'एनपी.मेमन' को खिलाना भी काम करेगा, लेकिन मैंने लैम्ब्डा को यह बताने के लिए छोड़ा कि यह कैसे हल करेगा जब आप अधिक सामान्य कार्यों को लागू करना चाहते हैं जो काम नहीं करना चाहते हैं अपने डिफ़ॉल्ट तरीकों से। पांडों में '.apply' फ़ंक्शन बहुत शक्तिशाली है। – ely

संबंधित मुद्दे