Усечение миллисекунд из DateTimeIndex - PullRequest
0 голосов
/ 29 мая 2018

Когда я использую 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 ]

Но это ничего не делает.

(pd.date_range('2011-01-01', '2011-01-03', periods=15)).astype('datetime64[s]')

Но он говорит, что не может разыграть его.

dr = (dr.to_series()).apply(lambda x:x.replace(microseconds=0))

Но эта строка не решает мою проблему, так как ...

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

1 Ответ

0 голосов
/ 29 мая 2018

Мне кажется, нужно 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...