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.
6 answers
Podría utilizar el total_seconds
método:
time_d_float = time_d.total_seconds()
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 timedelta
s 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)
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!
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)
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 ...
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()
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