Чтобы сделать короткий, вместо использования pd.to_datetime
для создания верхней границы, используйте np.datetime64
s = pd.Series([pd.to_datetime('2018-01-16 21:44:00'), pd.to_datetime('2018-01-16 21:41:00')])
print (np.minimum(s, np.datetime64('2018-01-16 21:43:00')))
0 2018-01-16 21:43:00
1 2018-01-16 21:41:00
dtype: datetime64[ns]
или даже это np.minimum(s, pd.to_datetime('2018-01-16 21:43:00').to_datetime64())
работает.
Чтобы увидеть немного больше: если вы посмотрите на оба элемента dtype
или даже на представление элементов двух способов создания данных, вы можете увидеть различия.
print (s.values)
array(['2018-01-16T21:44:00.000000000', '2018-01-16T21:41:00.000000000'],
dtype='datetime64[ns]')
print (np.array([pd.to_datetime('2018-01-16 21:44:00'), pd.to_datetime('2018-01-16 21:41:00')]))
array([Timestamp('2018-01-16 21:44:00'), Timestamp('2018-01-16 21:41:00')],
dtype=object)
Один интересный способизменить тип s.values
, такой как:
print (np.minimum(s.values.astype('datetime64[s]'),
pd.to_datetime('2018-01-16 21:43:00')))
array([Timestamp('2018-01-16 21:43:00'),
datetime.datetime(2018, 1, 16, 21, 41)], dtype=object)
, он работает, но вы можете видеть, что один является Timestamp
, а другой - datetime
, кажется, что когда типs.values
равно datetime[ns]
сравнение невозможно, в то время как datetime64[s]
или даже datetime64[ms]
это делает.
Также взгляните на этот ответ , это может помочь.