Как заставить Python округлять временную метку с помощью NS по сравнению с Truncate

#python

#python

Вопрос:

Попробовал пару разных методов, и оба не вернули желаемый результат. Я пытаюсь получить .349566 для отображения в моих микросекундах десятичного знака по сравнению с .349565, который отображается в данный момент, поскольку я хочу, чтобы он округлялся по сравнению с усечением.

 In [113]: dateutil.parser.parse('2014-06-18 13:06:00.349565827')
Out[113]: datetime.datetime(2014, 6, 18, 13, 6, 0, 349565)

(Pandas)
In [114]: pd.Timestamp('2014-06-18 13:06:00.349565827')
Out[114]: Timestamp('2014-06-18 13:06:00.349565', tz=None)
  

Мысли о быстром способе сделать это? Я знаю много вариантов, использующих манипулирование строками и тому подобное, но это, очевидно, не моя цель.

Комментарии:

1. Я не думаю, что есть какой-либо способ без манипулирования строкой

Ответ №1:

К сожалению, вам нужно будет округлить его вручную. С положительной стороны, это относительно легко сделать в вашем случае использования. Форматирование строк для чисел с плавающей запятой может округляться изначально, так что, вероятно, именно так я бы и поступил:

 date_str = '2014-06-18 13:06:00.349565827'

# split off the seconds amp; microseconds
beginning, sec = date_str.rsplit(':', 1) 

# Use string formatting to recreate a rounded timestamp
date = dateutil.parser.parse('{}:{:02.6f}'.format(beginning, float(sec)))
  

Комментарии:

1. Это выполняется, это дает TypeError: 'NoneType' object is not iterable

2. @PadraicCunningham Я по ошибке добавил дополнительную десятичную точку. Теперь это исправлено.

3. Эй, как насчет чего-то подобного: date_str = ‘20140618 19:16:38.73754749’ — на выходе отображается 737547, при правильном округлении это будет 737548.

4. @user1610719 Я не знаю ни одной встроенной функции округления (в Python или иным образом), которая бы выполняла такое округление в конце. Если вы хотите такого поведения, вам придется реализовать его самостоятельно.