截断DateTimeIndex的毫秒数

时间:2018-05-29 10:53:58

标签: python pandas

当我使用pandas.date_range()时,我有时会有很多毫秒的时间戳,我不想保留。

假设我......

import pandas as pd
dr = pd.date_range('2011-01-01', '2011-01-03', periods=15)
>>> dr
DatetimeIndex([          '2011-01-01 00:00:00',
               '2011-01-01 03:25:42.857142784',
               '2011-01-01 06:51:25.714285824',
               '2011-01-01 10:17:08.571428608',
               '2011-01-01 13:42:51.428571392',
               '2011-01-01 17:08:34.285714176',
               '2011-01-01 20:34:17.142857216',
                         '2011-01-02 00:00:00',
               '2011-01-02 03:25:42.857142784',
               '2011-01-02 06:51:25.714285824',
               '2011-01-02 10:17:08.571428608',
               '2011-01-02 13:42:51.428571392',
               '2011-01-02 17:08:34.285714176',
               '2011-01-02 20:34:17.142857216',
                         '2011-01-03 00:00:00'],
              dtype='datetime64[ns]', freq=None)

要忽略当前的几毫秒,我不得不这样做。

>>> t = []
>>> for item in dr:
...  idx = str(item).find('.')
...  if idx != -1:
...   item = str(item)[:idx]
...  t.append(pd.to_datetime(item))
...
>>> t
[Timestamp('2011-01-01 00:00:00'), 
 Timestamp('2011-01-01 03:25:42'), 
 Timestamp('2011-01-01 06:51:25'), 
 Timestamp('2011-01-01 10:17:08'), 
 Timestamp('2011-01-01 13:42:51'), 
 Timestamp('2011-01-01 17:08:34'), 
 Timestamp('2011-01-01 20:34:17'), 
 Timestamp('2011-01-02 00:00:00'), 
 Timestamp('2011-01-02 03:25:42'), 
 Timestamp('2011-01-02 06:51:25'), 
 Timestamp('2011-01-02 10:17:08'), 
 Timestamp('2011-01-02 13:42:51'), 
 Timestamp('2011-01-02 17:08:34'), 
 Timestamp('2011-01-02 20:34:17'), 
 Timestamp('2011-01-03 00:00:00')]

有更好的方法吗? 我已经试过了......

  1. dr = [ pd.to_datetime(item, format='%Y-%m-%d %H:%M:%S') for item in dr ]
  2. 但它没有做任何事情。

    1. (pd.date_range('2011-01-01', '2011-01-03', periods=15)).astype('datetime64[s]')
    2. 但是它说不能施展它。

      1. dr = (dr.to_series()).apply(lambda x:x.replace(microseconds=0))
      2. 但这条线并没有解决我的问题,因为......

        2018-04-17 15:07:04.777777664 gives --> 2018-04-17 15:07:04.000000664
        

1 个答案:

答案 0 :(得分:1)

我认为需要DatetimeIndex.floor

print (dr.floor('S'))
DatetimeIndex(['2011-01-01 00:00:00', '2011-01-01 03:25:42',
               '2011-01-01 06:51:25', '2011-01-01 10:17:08',
               '2011-01-01 13:42:51', '2011-01-01 17:08:34',
               '2011-01-01 20:34:17', '2011-01-02 00:00:00',
               '2011-01-02 03:25:42', '2011-01-02 06:51:25',
               '2011-01-02 10:17:08', '2011-01-02 13:42:51',
               '2011-01-02 17:08:34', '2011-01-02 20:34:17',
               '2011-01-03 00:00:00'],
              dtype='datetime64[ns]', freq=None)