2012-05-12 12 views
16

मैं अजगर का उपयोग कर पिछले कुछ समय से अब काम में विशिष्ट समय का चयन करें और अब मैं कर रहा हूँ यह काफी अच्छा (मैटलैब से आ रहा है।) को खोजनेपांडा, अजगर - कैसे प्रति घंटा डेटा का एक सेट का विश्लेषण करने के लिए timeseries और पांडा

को अटक गया। मैं अपने DataFrame इस तरह बनाया:

SamplingRateMinutes=60 
index = DateRange(initialTime,finalTime, offset=datetools.Minute(SamplingRateMinutes)) 
ts=DataFrame(data, index=index) 

क्या मैं अब क्या करना चाहते हैं आगे की गणना के लिए डेटा का उपयोग करने के घंटे 13 के लिए 10 और 20-23 पर सभी दिनों के लिए डेटा का चयन करने के लिए है। अब तक मैं डेटा

selectedData=ts[begin:end] 

का उपयोग कर कटा हुआ और मैं डेटा की जरूरत को चुनने के लिए गंदा पाशन के कुछ प्रकार प्राप्त करने के लिए यकीन है। लेकिन जो भी मैं चाहता हूं उसे इंडेक्स करने के लिए एक और शानदार तरीका होना चाहिए।

myIndex=ts.index[10<=ts.index.hour<=13 or 20<=ts.index.hour<=23] 
selectedData=ts[myIndex] 

मैं एक इंजीनियर और कोई programer हूँ उल्लेख करने के लिए :) ... अभी तक

उत्तर

7

यहाँ है एक उदाहरण है कि करता है: मुझे यकीन है कि यह एक आम समस्या है और स्यूडोकोड में समाधान ऐसा कुछ हद तक दिखना चाहिए है कर रहा हूँ आप क्या चाहते हैं:

In [32]: from datetime import datetime as dt 

In [33]: dr = p.DateRange(dt(2009,1,1),dt(2010,12,31), offset=p.datetools.Hour()) 

In [34]: hr = dr.map(lambda x: x.hour) 

In [35]: dt = p.DataFrame(rand(len(dr),2), dr) 

In [36]: dt 

Out[36]: 
<class 'pandas.core.frame.DataFrame'> 
DateRange: 17497 entries, 2009-01-01 00:00:00 to 2010-12-31 00:00:00 
offset: <1 Hour> 
Data columns: 
0 17497 non-null values 
1 17497 non-null values 
dtypes: float64(2) 

In [37]: dt[(hr >= 10) & (hr <=16)] 

Out[37]: 
<class 'pandas.core.frame.DataFrame'> 
Index: 5103 entries, 2009-01-01 10:00:00 to 2010-12-30 16:00:00 
Data columns: 
0 5103 non-null values 
1 5103 non-null values 
dtypes: float64(2) 
+0

काम करता है! आपका बहुत बहुत धन्यवाद! –

+2

यहां बताया गया है कि यह समाधान 0.10 के लिए सिंटैक्स में कैसे कार्यान्वित किया जाएगा और इसे नीचे वेस के उत्तर के साथ संयोजित किया जाएगा: 'dr = pd.date_range (डीटी (200 9,1,1), डीटी (2010,12,31), freq = 'एच'); डीटी = पीडी। डेटाफ्रेम (रैंड (लेन (डॉ), 2), डॉ); घंटा = dt.index.hour; चयनकर्ता = ((10 <= घंटा) और (घंटा <= 13)) | ((20 <= घंटा) और (घंटा <= 23)) डेटा = डीटी [चयनकर्ता] ' –

24

आगामी पांडा 0.8.0 में, आप लिखने के लिए सक्षम हो जाएगा

hour = ts.index.hour 
selector = ((10 <= hour) & (hour <= 13)) | ((20 <= hour) & (hour <= 23)) 
data = ts[selector] 
6

के रूप में यह ऊपर मेरी टिप्पणी में गंदा लग रहा है, मैं एक जवाब जो मार्क के जवाब पर पांडा 0.10.0 के लिए एक वाक्य रचना अद्यतन है, वेस 'संकेत के साथ संयुक्त प्रदान करने का निर्णय लिया:

import pandas as pd 
from datetime import datetime 

dr = pd.date_range(datetime(2009,1,1),datetime(2010,12,31),freq='H') 
dt = pd.DataFrame(rand(len(dr),2),dr) 
hour = dt.index.hour 
selector = ((10 <= hour) & (hour <= 13)) | ((20<=hour) & (hour<=23)) 
data = dt[selector] 
+0

डीटी पैकेज और डीटी चर का संघर्ष है –

0

पांडा DataFrame एक अंतर्निहित में समारोह pandas.DataFrame.between_time

df = pd.DataFrame(np.random.randn(1000, 2), 
        index=pd.date_range(start='2017-01-01', freq='10min', periods=1000)) 

समय के प्रत्येक अवधि के लिए 2 डेटा फ्रेम बनाएँ:

df1 = df.between_time(start_time='10:00', end_time='13:00') 
df2 = df.between_time(start_time='20:00', end_time='23:00') 

डाटा फ्रेम आप चाहते हैं विलय कर दिया और क्रमबद्ध हो जाता है डीएफ 1 और डीएफ 2:

pd.concat([df1, df2], axis=0).sort_index() 
संबंधित मुद्दे