Преобразование timedelta в число с плавающей запятой

Я получил объект timedelta от вычитания двух дат и времени. Мне нужно это значение как с плавающей запятой для дальнейших вычислений. Все, что я нашел, позволяет выполнять вычисления с плавающей запятой, но результатом остается объект timedelta.

time_d = datetime_1 - datetime_2
time_d_float = float(time_d)

не работает.


person fidelitas    schedule 28.01.2014    source источник


Ответы (5)


Вы можете использовать метод total_seconds:

time_d_float = time_d.total_seconds()
person unutbu    schedule 28.01.2014
comment
Я получаю AttributeError: объект datetime.timedelta не имеет атрибута total_seconds. - person aaa90210; 26.11.2014
comment
timedelta.total_seconds() был представлен в Python 2.7/3.2. - person Will Hardy; 12.01.2015
comment
@aaa90210 - это метод, который следует использовать с () - person Mache; 03.09.2020
comment
Не путать с timedelta.seconds (который возвращает int, кстати). - person Skippy le Grand Gourou; 28.01.2021

В Python 3.2 или выше можно разделить два timedelta дать поплавок. Это полезно, если вам нужно, чтобы значение было в единицах, отличных от секунд.

time_d_min = time_d / datetime.timedelta(minutes=1)
time_d_ms  = time_d / datetime.timedelta(milliseconds=1)
person dan04    schedule 28.01.2014
comment
Я считаю, что это самый естественный способ сделать это. Кроме того, он также отлично подходит для временной адаптации других языков/систем. - person Wolf; 17.09.2019

Если вам нужно количество дней в виде плавающего числа, вы можете использовать атрибут дней timedelta

time_d = datetime_1 - datetime_2
number_of_days = float(time_d.days)
person RoachLord    schedule 10.04.2017
comment
Это дает только количество дней. Вы теряете любое количество часов, минут или секунд, которое у вас есть в time_d. Это не точно. - person lpnorm; 28.06.2021

Вы можете использовать numpy, чтобы решить эту проблему:

import pandas as pd
import numpy as np

time_d = datetime_1 - datetime_2

#for a single value
number_of_days =pd.DataFrame([time_d]).apply(np.float32)

#for a Dataframe
number_of_days = time_d.apply(np.float32)

Надеюсь, это полезно!

person Monique Marins    schedule 21.09.2017
comment
Я получаю эту ошибку с вашим предложением: AttributeError: объект «datetime.timedelta» не имеет атрибута «применить» - person lancew; 21.09.2017
comment
Привет, @lancew, спасибо, что поймал это! В этом случае мне нужно было преобразовать фрейм данных в плавающий, чтобы это сработало для меня. Если вы хотите преобразовать уникальное значение, вы можете сделать это: pd.DataFrame([time_d]).apply(np.float32) . В этом случае вам нужно импортировать как «панды как pd», так и «numpy как np». Хотя я буду тестировать другие способы. Пожалуйста, дайте мне знать, если это работает. - person Monique Marins; 22.09.2017
comment
Теперь я получаю эту ошибку: TypeError: аргумент float() должен быть строкой или числом, а не «Timedelta». - person supercooler8; 04.05.2021

У меня была такая же проблема раньше, и я использовал timedelta.total_seconds, чтобы получить расчетную продолжительность в секундах с плавающей запятой, и это работает. Я надеюсь, что это работает для вас.

from datetime import timedelta,datetime

time_d = datetime_1 - datetime_2

time_d.total_seconds()                  
person Faith    schedule 02.06.2016
comment
Как это добавляет что-то к принятому в настоящее время ответу? - person Ironcache; 02.06.2016