我的问题非常开放,我正在寻找一些有关如何使用以下格式操作数组的建议:
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['Date'] 中格式为 yyyy-mm-yy 的日期与 t
中显示的日期(格式也是 yyyy-)不匹配毫米-日。这可以通过查看v
来验证,其中的内容都是假的。
最佳答案
您可以使用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
关于python - 仅根据工作日(上午 8 点至晚上 10 点)和工作日在 Python 中查询数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37784280/