2016-06-13 34 views
2

我的問題是非常開放式的,並正在尋找如何處理以下格式的數組一些建議:查詢數據和平日只

list: 
[datetime.datetime(2016, 5, 17, 11, 32, 25), 
datetime.datetime(2016, 5, 17, 11, 33, 25), 
datetime.datetime(2016, 5, 17, 11, 34, 25), ... 

我正在考慮操作數組,以便僅考慮(1)個工作日,然後(2)僅考慮上午8點至晚上10點的時間。我使用numpy還是熊貓可以做到這一點?可以使用列表的格式,即datetime.datetime,還是將其轉換爲另一種格式?

我已經嘗試拆分時代,以便日期和時間是分開的。這樣做下面的命令:

myArray.ix[pd.to_datetime(myArray['Epoch']).isin(pd.bdate_range(start='2016-05-16', end='2016-06-15') 

大紀元格式是日期和時間,所以我只是拆這使得myArray的由現在「日期」的,「時代」,「價值」三個單獨的列。爲了更好地理解這個命令(迄今不工作),以及如何使用它,我用下面的調試行:

t = pd.bdate_range(start='2016-05-16', end='2016-06-15') 
u = myArray['Date'] 
v = u.isin(t) 

的問題是從我所看到的,在myarray的日期格式爲yyyy-mm-yy的['日期']與t中顯示的日期不符,格式爲yyyy-mm-dd。這可以通過查看v來驗證,其中這些內容都是錯誤的。

回答

3

您可以使用bdate_range()僅選擇工作日(1):對(2)之間......選擇倍

In [96]: d.ix[pd.to_datetime(d.Date.dt.date).isin(pd.bdate_range(start='2016-05-16', end='2016-05-22'))] 
Out[96]: 
       Date  val 
0 2016-05-17 11:32:25 0.235264 
1 2016-05-17 11:33:25 0.755800 
2 2016-05-17 11:34:25 0.849591 
3 2016-05-20 12:00:25 0.955704 

between_time()

In [97]: d.set_index('Date').between_time('11:30','11:34') 
Out[97]: 
          val 
Date 
2016-05-17 11:32:25 0.235264 
2016-05-17 11:33:25 0.755800 

保留原始索引:

In [99]: d.set_index('Date').between_time('11:30','11:34').reset_index() 
Out[99]: 
       Date  val 
0 2016-05-17 11:32:25 0.235264 
1 2016-05-17 11:33:25 0.755800 

樣本數據框:

In [98]: d 
Out[98]: 
       Date  val 
0 2016-05-17 11:32:25 0.235264 
1 2016-05-17 11:33:25 0.755800 
2 2016-05-17 11:34:25 0.849591 
3 2016-05-20 12:00:25 0.955704 
4 2016-05-21 13:13:13 0.301753 
+0

謝謝你!我想我正在路上,但還沒到那兒。我重寫了以下代碼:modified_array.ix [pd.to_datetime(modified_array ['Epoch'])。isin(pd.bdate_range(start ='2016-05-17',end ='2016-05-22') )]「d.date.dt.date」的遺漏是因爲這本來不起作用。我懷疑,儘管這可能產生了爲什麼我沒有收到這行代碼的錯誤消息,但數據幀沒有變化(在本例中爲「modified_array」)。 – pymat

+0

順便說一下,爲了調試和檢查輸出,我嘗試使用np.save將數組保存到文件,但是這產生了一個我無法讀取的文件。 – pymat