比较日期时间的np数组和python中的单个日期时间

时间:2019-08-08 07:30:10

标签: python arrays numpy datetime datetime-comparison

我正在尝试将日期时间数组与单个日期时间进行比较

<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" />
<link rel="stylesheet" href="https://netdna.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.css" />
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.9.0/styles/github.min.css" />

<script src="https://momentjs.com/downloads/moment.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js"></script>

<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/tempusdominus-bootstrap-4/5.0.0-alpha14/js/tempusdominus-bootstrap-4.min.js"></script>
<link rel="stylesheet" href="https://tempusdominus.github.io/bootstrap-4/theme/css/tempusdominus-bootstrap-4.css" />

<div class="container">
  <div class="row">
    <div class="col-sm-6">
      <input type="text" class="form-control datetimepicker-input" id="datetimepicker5" data-toggle="datetimepicker" data-target="#datetimepicker5" />
    </div>
    <script type="text/javascript">
      $(function() {
        $('#datetimepicker5').datetimepicker();
      });
    </script>
  </div>
</div>

这给我一个错误。  tt = np.array([['1993-09-01T00:00:00.000000000', '2005-12-01T00:00:00.000000000'], ['1992-07-01T00:00:00.000000000', '2009-05-01T00:00:00.000000000']], dtype='datetime64[ns]') tt > dt.datetime(2001,1,1) 我可以知道如何将日期时间数组与单个日期时间进行比较吗?

我希望得到的结果是np.arrary([[False,True],[False,True]])

2 个答案:

答案 0 :(得分:0)

原因是datetime对象与numpy.datetime对象不同。因此,您要比较不同的对象,因此会出现错误。 请尝试以下代码:

tt = np.array([['1993-09-01T00:00:00.000000000', 
        '2005-12-01T00:00:00.000000000'],
       ['1992-07-01T00:00:00.000000000', 
        '2009-05-01T00:00:00.000000000']], dtype='datetime64')
tt > np.datetime64('2001-01-01')

您将获得理想的结果!

答案 1 :(得分:0)

当尝试将numpy对象与其他类型的对象进行比较时,numpy将尝试进行转换。在这里,目标是不属于numpy的Python对象,因此numpy会将numpy日期转换为Python对象。人们会期望最终的Python对象为datetime.datetime,但是由于它不支持纳秒,因此numpy会将其转换为int

请参见numpy代码的相关部分。 https://github.com/numpy/numpy/blob/608329acac78b98e9c1044dca23a4f287d639b24/numpy/core/src/multiarray/datetime.c#L2847

例如,您可以尝试:

>>> np.array(['2009-05-01T00:00:00.000000000'], dtype='datetime64[ns]').tolist()
[1241136000000000000]

Python int无法与datetime.datetime进行比较,因此会出错。

但是,如果numpy日期时间可以表示为datetime.datetime(如果其精度高于微秒且在有效日期时间范围内),则将其转换为datetime.datetime而不是int。尝试例如:

>>> np.array(['2009-05-01T00:00:00.000000000'], dtype='datetime64[us]').tolist()
[datetime.datetime(2009, 5, 1, 0, 0)]

因此,为了使您的示例正常工作,您可以将dtypedatetime64[ns]更改为datetime64[us],它的行为应与您预期的一样。

请注意,此行为与数组无关。

>>> np.datetime64('2009-05-01T00:00:00.000000000', 'ns') > dt.datetime(2001, 1, 1)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: '>' not supported between instances of 'int' and 'datetime.datetime'
>>> np.datetime64('2009-05-01T00:00:00.000000000', 'us') > dt.datetime(2001, 1, 1)
True