and*_*s-h 7 python datetime numpy scipy
我有一个2d numpy.array,其中第一列包含datetime.datetime对象,第二列包含第二列:
A = array([[2002-03-14 19:57:38, 197],
[2002-03-17 16:31:33, 237],
[2002-03-17 16:47:18, 238],
[2002-03-17 18:29:31, 239],
[2002-03-17 20:10:11, 240],
[2002-03-18 16:18:08, 252],
[2002-03-23 23:44:38, 327],
[2002-03-24 09:52:26, 334],
[2002-03-25 16:04:21, 352],
[2002-03-25 18:53:48, 353]], dtype=object)
Run Code Online (Sandbox Code Playgroud)
我想要做的是选择特定日期的所有行,例如
A[first_column.date()==datetime.date(2002,3,17)]
array([[2002-03-17 16:31:33, 237],
[2002-03-17 16:47:18, 238],
[2002-03-17 18:29:31, 239],
[2002-03-17 20:10:11, 240]], dtype=object)
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
谢谢你的见解:)
您可以这样做:
from_date=datetime.datetime(2002,3,17,0,0,0)
to_date=from_date+datetime.timedelta(days=1)
idx=(A[:,0]>from_date) & (A[:,0]<=to_date)
print(A[idx])
# array([[2002-03-17 16:31:33, 237],
# [2002-03-17 16:47:18, 238],
# [2002-03-17 18:29:31, 239],
# [2002-03-17 20:10:11, 240]], dtype=object)
Run Code Online (Sandbox Code Playgroud)
A[:,0]
是的第一列A
。
不幸的是,A[:,0]
与datetime.date
对象进行比较会引发TypeError。但是,与datetime.datetime
对象进行比较可以:
In [63]: A[:,0]>datetime.datetime(2002,3,17,0,0,0)
Out[63]: array([False, True, True, True, True, True, True, True, True, True], dtype=bool)
Run Code Online (Sandbox Code Playgroud)
而且,不幸的是,
datetime.datetime(2002,3,17,0,0,0)<A[:,0]<=datetime.datetime(2002,3,18,0,0,0)
Run Code Online (Sandbox Code Playgroud)
也会引发TypeError,因为它调用datetime.datetime
的__lt__
方法而不是numpy数组的__lt__
方法。也许这是一个错误。
无论如何,不难解决。你可以说
In [69]: (A[:,0]>datetime.datetime(2002,3,17,0,0,0)) & (A[:,0]<=datetime.datetime(2002,3,18,0,0,0))
Out[69]: array([False, True, True, True, True, False, False, False, False, False], dtype=bool)
Run Code Online (Sandbox Code Playgroud)
由于这为您提供了一个布尔数组,因此您可以将其用作的“花式索引” A
,从而产生所需的结果。
归档时间: |
|
查看次数: |
5539 次 |
最近记录: |