2016-06-13 33 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