2015-10-20 2 views
5

मेरे पास datetime.date द्वारा अनुक्रमित एक समय श्रृंखला है।मैं सूचकांक में तारीखों पर तारीखों पर एक पांडा समय श्रृंखला कैसे लगा सकता हूं?

1999-12-31 0 
2000-06-30 170382.118454 
2000-12-29 -319260.443362 

मैं दिसंबर 28 वें 2000 तक श्रृंखला की शुरुआत से काट चाहते हैं, लेकिन यह काम नहीं करता क्योंकि उस तारीख सूचकांक में नहीं है (मैं एक KeyError मिल: यहाँ श्रृंखला के पहले समुद्री मील हैं जब मैं original_series[:datetime.date(2000,12,28)] प्रयास करें। मैं भी टाइम स्टाम्प्स के सूचकांक में परिवर्तित करने की कोशिश की है, लेकिन वह बहुत नकली परिणाम देता है (यह नकली समुद्री मील, नीचे देखें बनाती है), इसलिए मैंने सोचा इस समस्या का एक अच्छा तरीका है अगर।

test = pd.Series(original_series.values, map(pd.Timestamp, original_series.index)) 

पहली नज़र में, यह ठीक दिखता है:

1999-12-31   0.000000 
2000-06-30 170382.118454 
2000-12-29 -319260.443362 

लेकिन तब मैं अपने टुकड़ा करने की क्रिया करने की कोशिश (जहां जनवरी 2000 में उन अतिरिक्त दिनों से आते हैं?):

In [84]: test[:'2000-12-28'] 
Out[84]: 
1999-12-31   0.000000 
2000-06-30 170382.118454 
2000-01-03 -71073.979016 
2000-01-04 100498.744748 
2000-01-05  91104.743684 
2000-01-06  82290.255459 

उत्तर

3

आप बस कर सकते हैं, अगर ts अपने time.serie है:

In [77]: ts = pd.Series([99,65],index=pd.to_datetime(['2000-12-24','2000-12-30'])) 

In [78]: ts 
Out[78]: 
2000-12-24 99 
2000-12-30 65 
dtype: int64 

In [79]: ts[ts.index<=pd.to_datetime('2000-12-28')] 
Out[79]: 
2000-12-24 99 
dtype: int64 

आप indexstring के रूप में है, तो बस के साथ आगे बढ़ना:

ts[ts.index.map(pd.to_datetime)<=pd.to_datetime('2000-12-28')] 
+0

आपका answe आर बिल्कुल सही है, लेकिन मैं भी बेवकूफ बेवकूफ था - मैंने इंडेक्स द्वारा अपना टाइम सीरीज़ सॉर्ट नहीं किया था, इसलिए "निर्मित" तिथियों के बारे में मेरा भ्रम। सहायता के लिए धन्यवाद। –

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