Convertir timedelta en punto flotante


Obtuve un objeto timedelta de la resta de dos datetimes. Necesito este valor como punto flotante para cálculos adicionales. Todo lo que he encontrado permite el cálculo con puntos flotantes, pero el resultado sigue siendo un objeto timedelta.

time_d = datetime_1 - datetime_2
time_d_float = float(time_d)

No funciona.

Author: unutbu, 2014-01-28

6 answers

Podría utilizar el total_seconds método:

time_d_float = time_d.total_seconds()
 47
Author: unutbu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-01-28 19:11:51

En versiones recientes de Python, puedes dividir dos timedeltas para dar un flotador. Esto es útil si necesita que el valor esté en unidades que no sean segundos.

time_d_min = time_d / datetime.timedelta(minutes=1)
time_d_ms  = time_d / datetime.timedelta(milliseconds=1)
 13
Author: dan04,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-01-28 22:57:45

Puedes usar numpy para resolver eso:

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)

Espero que sea útil!

 2
Author: Monique Marins,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-10-01 15:30:00

Si necesita el número de días como un número flotante, puede usar el atributo días de timedelta

time_d = datetime_1 - datetime_2
number_of_days = float(time_d.days)
 0
Author: RoachLord,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-04-10 09:00:01
# first column of the file is the datetime in yyyy-mm-dd hh:mm:ss:microseconds format
df = pd.read_csv(infile, header=None)

ts = df[0]

t = ts.apply(lambda x: dt.datetime.strptime(x, '%Y-%m-%d %H:%M:%S.%f'))

x = df[1]

td = np.zeros(len(t))

for i in range(len(t)):
    td[i] = (t[i] - t[0]).total_seconds()

print(td)

Valores impresos: [0.00000000 e+00 1.31901500 e+00 2.63946100 e+00 ...

 0
Author: Andrei Keino,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-08-30 06:20:54

Tuve el mismo problema antes y usé timedelta.total_seconds para obtener la duración estimada en segundos con float y funciona. Espero que esto funcione para ti.

from datetime import timedelta,datetime

time_d = datetime_1 - datetime_2

time_d.total_seconds()                  
 -4
Author: Faith,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-06-02 14:02:13