基于工作日(上午8点至晚上10点)和工作日查询Python中的数据

时间:2016-06-13 07:47:40

标签: python arrays datetime numpy pandas

我的问题非常开放,我正在寻找有关如何使用以下格式操作数组的一些建议:

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或者pandas能实现这个目标吗?可以使用列表的格式,即datetime.datetime,还是将其转换为另一种格式?

我尝试拆分时代,以便日期和时间分开。在执行此操作时,请执行以下命令:

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

Epoch格式是日期和时间,所以我只是分开这个,以便myArray现在包括' Date',' Epoch',' Value'作为三个单独的列。为了更好地理解这个命令(到目前为止还没有工作)以及如何使用它,我使用了以下调试行:

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时进行验证,其中此内容均为假。

1 个答案:

答案 0 :(得分:3)

您可以使用bdate_range()仅选择工作日(1):

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()用于选择......(2)之间的时间:

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