2015-07-17 12 views
6

कनवर्ट करें क्या "30T" (30 मिनट) "2S" (2 सेकंड) जैसे स्ट्रिंग द्वारा आवृत्त आवृत्तियों को परिवर्तित करना संभव है जिसे टाइमडेल्टा से तुलना की जा सकती है?pandas freq string को timedelta

यदि संभव हो तो मैं पांडा के लिए आंतरिक तंत्र की तलाश में हूं। these जैसे तंत्र का उपयोग कर सभी संभावित स्ट्रिंग रूपांतरण कोडिंग मजबूत नहीं होगा।

+0

आप अपने इनपुट कृपया दे सकते हैं: लेकिन, आप भी freqstr के बजाय freq, जो सीधे एक आवृत्ति ऑब्जेक्ट का उपयोग कर सकते हैं? –

+0

संभावित डुप्लिकेट [एक सरल स्ट्रिंग से टाइमडेल्टा ऑब्जेक्ट कैसे बनाएं] (http://stackoverflow.com/questions/4628122/how-to-construct-a-timedelta-object-from-a-simple-string) – SiHa

+0

@ कोलोनेल बेउवेल: इनपुट स्ट्रिंग्स जैसे "30T" या तो डेटटाइम इंडेक्स की 'freqstr' विशेषता से प्राप्त या पुनर्प्राप्त है –

उत्तर

9

कई मामलों में, आप इसके लिए to_timedelta फ़ंक्शन का उपयोग कर सकते हैं। यह एक timedelta के लिए एक स्ट्रिंग में परिवर्तित कर देंगे:

In [9]: pd.to_timedelta('30min') 
Out[9]: Timedelta('0 days 00:30:00') 

In [10]: pd.to_timedelta('2S') 
Out[10]: Timedelta('0 days 00:00:02') 

हालांकि, यह है कि pd.to_timedelta ('30T') काम नहीं करता है लगता है, लेकिन यह शायद एक लापता सुविधा के रूप में माना जा सकता है।
लेकिन, यह एक के लिए यदि आप सबसे पहले एक आवृत्ति वस्तु को परिवर्तित काम करता है और उसके बाद to_timedelta को यह आपूर्ति: यदि आप एक freqstr एक DatetimeIndex से से शुरू करते हैं

In [19]: from pandas.tseries.frequencies import to_offset 

In [20]: pd.to_timedelta(to_offset('30T')) 
Out[20]: Timedelta('0 days 00:30:00') 

, दूसरा दृष्टिकोण हमेशा काम करेंगे।

In [34]: dtidx = pd.date_range('2012-01-01', periods=5, freq='30min') 

In [35]: pd.to_timedelta(dtidx.freq) 
Out[35]: Timedelta('0 days 00:30:00') 
संबंधित मुद्दे